在SQL2000中,向表中插入数据会出现IDENTITY_INSERT 设置为ON的错误。以前从来没有遇到过。这问题怎么解决。
insert into messagesInfo 
( messageID,messageTitle,messagerName, messagerPlace,connectPhone,sexual,email,
messageDate,messageContent,new1,new2,new3 )
values
(300000,'社会主义好啊','他不好','男士','四川成都','028-8303xxxx','[email protected]'
,'2010-1-1','你们服务真的很差!','附加字段1','附加字段2','附加字段3')上面messageID为int自增。执行代码会出现如下错误。----------------------------------------
“/sanquanLog”应用程序中的服务器错误。
--------------------------------------------------------------------------------仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'messagesInfo' 中为标识列指定显式值。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'messagesInfo' 中为标识列指定显式值。源错误: 
行 66:     scmd.Parameters.Add("@new3",msInfo.new3);
行 67: 
行 68:     int count = scmd.ExecuteNonQuery();
行 69:     sqlcon.Close();
行 70: 
 源文件: c:\inetpub\wwwroot\sanquanlog\message\messagedb.cs    行: 68 

解决方案 »

  1.   

    如果改成messageID不自增,会出现如下问题。
    -----------------服务器: 消息 8152,级别 16,状态 9,行 1
    将截断字符串或二进制数据。
    语句已终止。-----------------向表格中插入第一条数据的时候会出现问题。
      

  2.   

    有某个除了messageID字段的其他字段,其位数不够,插入数据长度过大.另:不允许对自增列字段显示插入数据.SET IDENTITY_INSERT
    允许将显式值插入表的标识列中。语法
    SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF }参数
    database是指定的表所驻留的数据库名称。owner是表所有者的名称。table是含有标识列的表名。注释
    任何时候,会话中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON。如果某个表已将此属性设置为 ON,并且为另一个表发出了 SET IDENTITY_INSERT ON 语句,则 Microsoft® SQL Server™ 返回一个错误信息,指出 SET IDENTITY_INSERT 已设置为 ON 并报告此属性已设置为 ON 的表。如果插入值大于表的当前标识值,则 SQL Server 自动将新插入值作为当前标识值使用。SET IDENTITY_INSERT 的设置是在执行或运行时设置,而不是在分析时设置。权限
    执行权限默认授予 sysadmin 固定服务器角色和 db_owner 及 db_ddladmin 固定数据库角色以及对象所有者。示例
    下例创建一个含有标识列的表,并显示如何使用 SET IDENTITY_INSERT 设置填充由 DELETE 语句导致的标识值中的空隙。-- Create products table.
    CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40))
    GO
    -- Inserting values into products table.
    INSERT INTO products (product) VALUES ('screwdriver')
    INSERT INTO products (product) VALUES ('hammer')
    INSERT INTO products (product) VALUES ('saw')
    INSERT INTO products (product) VALUES ('shovel')
    GO-- Create a gap in the identity values.
    DELETE products 
    WHERE product = 'saw'
    GOSELECT * 
    FROM products
    GO-- Attempt to insert an explicit ID value of 3;
    -- should return a warning.
    INSERT INTO products (id, product) VALUES(3, 'garden shovel')
    GO
    -- SET IDENTITY_INSERT to ON.
    SET IDENTITY_INSERT products ON
    GO-- Attempt to insert an explicit ID value of 3
    INSERT INTO products (id, product) VALUES(3, 'garden shovel').
    GOSELECT * 
    FROM products
    GO
    -- Drop products table.
    DROP TABLE products
    GO
      

  3.   

    上面代码有错,改成如下,执行后有insert into messagesInfo 
    ( messageID,messageTitle,messagerName, messagerPlace,connectPhone,sexual,email,
    messageDate,messageContent,new1,new2,new3 )
    values
    (300000,'社会主义好啊','他不好','四川成都新都西南石油大学','028-83035391','男士','[email protected]'
    ,'2010-1-1','你们服务真的很差!','附加字段1','附加字段2','附加字段3')错误:
    服务器: 消息 544,级别 16,状态 1,行 1
    当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'messagesInfo' 中的标识列插入显式值。
      

  4.   

    insert into messagesInfo 
    (messageTitle,messagerName, messagerPlace,connectPhone,sexual,email,
    messageDate,messageContent,new1,new2,new3 )
    values
    ('社会主义好啊','他不好','四川成都新都西南石油大学','028-83035391','男士','[email protected]'
    ,'2010-1-1','你们服务真的很差!','附加字段1','附加字段2','附加字段3')
      

  5.   

    看了2楼后面的解释没有?既然你是自增列,就不用去管messageID的值.
      

  6.   

    我们执行如下代码会有错:
    insert into messagesInfo 
    (messageTitle,messagerName, messagerPlace,connectPhone,sexual,email,
    messageDate,messageContent,new1,new2,new3 )
    values
    ('社会主义好啊','他不好','四川成都新都西南石油大学','028-83035391','男士','[email protected]'
    ,'2010-1-1','你们服务真的很差!','附加字段1','附加字段2','附加字段3')SELECT * FROM messagesInfoDELETE FROM messagesInfoinsert into messagesInfo 
    (messageID,messageTitle,messagerName, messagerPlace,connectPhone,sexual,email,
    messageDate,messageContent,new1,new2,new3 )
    values
    (300000,'社会主义好啊','他不好','四川成都新都西南石油大学','028-83035391','男士','[email protected]'
    ,'2010-1-1','你们服务真的很差!','附加字段1','附加字段2','附加字段3')
    会有如下错误:服务器: 消息 544,级别 16,状态 1,行 1
    当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'messagesInfo' 中的标识列插入显式值。
      

  7.   


    因为我在C#代码里面判断messagesInfo的记录是否为空,
    如果为空那么就给表格的第一条messageID 赋值为 300000,
    如果不为空那么就根据自增取得messageID的值。
      

  8.   

    既然自增怎么会有空值出现?
    如果那样建议你重新设计你的表 加一个ID自增字段
    不要把messageID 射成自增
      

  9.   

    insert into messagesInfo 
    (messageID,messageTitle,messagerName, messagerPlace,connectPhone,sexual,email,
    messageDate,messageContent,new1,new2,new3 )
    values
    (isnull(@messageId,300000),'社会主义好啊','他不好','四川成都新都西南石油大学','028-83035391','男士','[email protected]'
    ,'2010-1-1','你们服务真的很差!','附加字段1','附加字段2','附加字段3')
      

  10.   

    比如说你的网站哈,在你的网站中得第一个用户注册的时候就要判断这个表格是否为空,这样好设置表格的自增主键第一个值,这样以后就根据自增就可以了设置主键的值了,如果是这种情况哈,再将表格中的所有记录都删除后,再向表格中插入数据,还会判断表格是否为空,这个时候向表格中插入数据的时候会出现如题错误。我想这个是SQL的一个问题。后来我自己写了一个主键生成方法,每次插入的时候就调用和这个方法生成主键。就不用自增方式了。我们老师说自增字段为主键有个问题,可能就是这个问题。