在我的参数内,SET IDENTITY_INSERT不起作用。
在我的参数内,SET IDENTITY_INSERT不起作用。
我试图向一个带有自增列的表中插入值,我知道我必须使用SET IDENTITY_INSERT
来执行这个操作。
我执行的操作如下:
DECLARE @TABLE_NAME NVARCHAR(200), @QUERY NVARCHAR(500) SET @TABLE_NAME = 'devListaTrabajo' SET @QUERY = 'SET IDENTITY_INSERT ' + @TABLE_NAME + ' ON' PRINT @QUERY EXEC (@QUERY) INSERT INTO devListaTrabajo (lisId,lisDescripcion,lisEstado,topId,parCLS,parcod) VALUES (1,'H',1,1,'H','LH')
而我的结果是:
SET IDENTITY_INSERT devListaTrabajo ON Msg 544, Level 16, State 1, Line 79 当IDENTITY_INSERT为OFF时,无法为表'devListaTrabajo'的自增列插入显式值。
如果你问我为什么我不使用不带参数的普通语句,那是因为我计划在表发生变化时进行循环操作,并且我打算使用SET IDENTITY_INSERT
。
也许我忽略了一些关于使用这个语句的SQL规则。请给我解释一下或提供其他解决方法。
在使用EXEC()
命令时,它运行在一个与代码的其余部分分离的上下文中。这个上下文运行、完成,并且返回到原始上下文,其中identity insert从未被改变过。
如果你想要像这样动态地实现这个,你必须将变量中的整个语句放入其中。
参见What is the scope of SET IDENTITY_INSERT xyz ON?
太好了,我已经将插入语句包含在查询中,并且它完美地运行了,谢谢!