0

我最近更改了我的数据表,我删除了列并添加了一个新列,该列定义为 identity = True 和 identity seed = 1,identity increment = 1。当我尝试通过 STORE PROCEDURE 将数据插入该表时,我得到了这个异常:

只有在使用列列表并且 IDENTITY_INSERT 为 ON 时,才能为表“AirConditioner”中的标识列指定显式值。

我看到我需要添加以下行: SET IDENTITY_INSERT [dbo].[AirConditioner] ON 最后关闭我添加了它仍然抛出异常......

我的存储过程作为图片附加在此处输入图像描述

4

4 回答 4

4

SQL Server 将负责为您的标识列分配一个值。您应该@ID从插入语句中删除并删除IDENTITY_INSERT语句。

于 2011-06-23T13:23:54.230 回答
0

只能在使用列列表并且 IDENTITY_INSERT 为 ON 时指定。

您忘记了第一个条件:列列表。列列表是(通常)在表名和 之间的可选元素values。您应该像这样指定它:

INSERT INTO AirConditioner (ID, CategoricNumber, ...)
VALUES(@ID, @CategoricNumber, ...)
于 2011-06-23T13:28:27.363 回答
0

不要使用 set identity insert on。如果你有一个身份,你应该让 SQL Server 决定在那里放什么值。

ALTER PROCEDURE [dbo].[AddAirConditioner] @CategoricNumber int, @Name nvarchar(50),
@PicName nvarchar(100), @ShortDetails nvarchar(200), @Details nvarchar(2000), 
@Price int, @ImagePath nvarchar(500), @AirConditionerType nvarchar(50), @COP float, 
@BTU float, @ProdType nvarchar(20), @ProdIndex int 
AS   

INSERT INTO AirConditioner VALUES( @CategoricNumber, @Name, @PicName, 
@ShortDetails, @Details, @Price, @ImagePath, @AirConditionerType, @COP,
@BTU, @ProdType, @ProdIndex) 

如果您需要取回 ID 以便在子表中使用,请使用 scope_identity 或输出子句。在在线书籍中查找这些内容以了解如何使用。

于 2011-06-23T13:28:35.567 回答
-1

尝试放置

SET IDENTITY_INSERT [dbo].[AirConditioner] ON
GO

变更程序之前

于 2011-06-23T13:22:53.040 回答