在我的参数内,SET IDENTITY_INSERT不起作用。

8 浏览
0 Comments

在我的参数内,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规则。请给我解释一下或提供其他解决方法。

0
0 Comments

在使用EXEC()命令时,它运行在一个与代码的其余部分分离的上下文中。这个上下文运行、完成,并且返回到原始上下文,其中identity insert从未被改变过。

如果你想要像这样动态地实现这个,你必须将变量中的整个语句放入其中。

参见What is the scope of SET IDENTITY_INSERT xyz ON?

太好了,我已经将插入语句包含在查询中,并且它完美地运行了,谢谢!

0