先用query 执行一下query.close
query.sql.clear;
query.sql.add('set identity_insert on');
query.excutsqltable....

解决方案 »

  1.   

    to newyj:
      哪有这样的语法,应该是'set identity_insert {database.owner.table} on';
      另外应该是executesql 
      

  2.   

    to newyj:我曾经试过类似你的方法(写法不太一样),不行!
      

  3.   

    看我的 我用ado测试的 原理一样
    adoquery1.SQL.add(' SET IDENTITY_INSERT db.dbo.t1 on');

    ADOConnection1.Execute(' SET IDENTITY_INSERT db.dbo.t1 on')后
    用ADOConnection1 或adoquery1 均可插入值
    而adotabel军报错 可能 是因为 insert 自动增加的字段 要求显示的比如
    SET IDENTITY_INSERT db.dbo.t1 on
    insert into t1 values(111,'aa','bb') 就不行错误信息
    //仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 't1' 中为标识列指定显式值。
    insert into t1(a1,a2,a3) values(111,'aa','bb') 就可以
    CREATE TABLE [t1] (
    [a1] [int] IDENTITY (1, 1) NOT NULL ,
    [a2] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [a3] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    CONSTRAINT [PK_t1] PRIMARY KEY  CLUSTERED 
    (
    [a1]
    )  ON [PRIMARY] 
    ) ON [PRIMARY]procedure TForm1.Button1Click(Sender: TObject);
    begin
      ADOConnection1.Execute(' SET IDENTITY_INSERT db.dbo.t1 on')
    end;procedure TForm1.SpeedButton1Click(Sender: TObject);
    begin
      ADOConnection1.Execute('insert into t1(a1) values('+edit1.text+')');
    end;procedure TForm1.SpeedButton2Click(Sender: TObject);
    begin
      ADOTable1.Insert;
      adotable1.Fields[0].AsInteger := strtoint(edit1.text);
      adotable1.Post;
    end;procedure TForm1.SpeedButton3Click(Sender: TObject);
    begin
      ADOQuery1.Close;
      ADOQuery1.SQL.clear;
      adoquery1.SQL.add(' SET IDENTITY_INSERT db.dbo.t1 on');
      adoquery1.ExecSQL;
    end;procedure TForm1.SpeedButton4Click(Sender: TObject);
    begin
      ADOQuery1.Close;
      ADOQuery1.SQL.clear;
      adoquery1.SQL.add('insert into t1(a1) values('+edit1.text+')');
      adoquery1.ExecSQL;
    end;
      

  4.   

    还有一个问题不知你注意到了没有
    在 sql查询分析器中开两个窗口 A,B在 a 窗口 中执行SET IDENTITY_INSERT db.dbo.t1 on 后
    b窗口 还是无法执行insert into t1(a1,a2,a3) values(111,'aa','bb') 
    必须在b窗口 也执行SET IDENTITY_INSERT db.dbo.t1 on 后才行SET IDENTITY_INSERT 是局部变量??