我最近更改了我的数据表,我删除了列并添加了一个新列,定义为identity = True和identity seed = 1,identity increment = 1。 当我试图通过STORE PROCEDURE将数据插入此表时,我得到了这个例外:
只有在使用列列表并且IDENTITY_INSERT为ON时,才能指定表'AirConditioner'中标识列的显式值。
我看到我需要添加以下行: SET IDENTITY_INSERT [dbo]。[AirConditioner] ON,最后OFF 我补充说,它仍然抛出异常......
我的商店程序附在图片
上答案 0 :(得分:4)
SQL Server将负责为您的标识列分配值。您应该从insert语句中删除@ID
并删除IDENTITY_INSERT
语句。
答案 1 :(得分:0)
只能在列中指定 使用list并且IDENTITY_INSERT是 ON。
您忘记了第一个条件:列列表。列列表是表名和values
之间的(通常)可选元素。您应该将其指定为:
INSERT INTO AirConditioner (ID, CategoricNumber, ...)
VALUES(@ID, @CategoricNumber, ...)
答案 2 :(得分:0)
请勿使用set identity insert。如果你有一个身份,你应该让SQL服务器决定放在那里的值。
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或output子句。在线查看这些内容以了解如何使用。
答案 3 :(得分:-1)
尝试放置
SET IDENTITY_INSERT [dbo].[AirConditioner] ON
GO
在改变程序之前