SET IDENTITY_INSERT 在我的参数里面它不起作用

Posted

技术标签:

【中文标题】SET IDENTITY_INSERT 在我的参数里面它不起作用【英文标题】:SET IDENTITY_INSERT Inside my parameter it does not work 【发布时间】:2020-06-11 02:21:37 【问题描述】:

我正在尝试将值插入具有标识的表中,我知道在插入之前必须使用: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
Cannot insert explicit value for identity column in table 'devListaTrabajo' when IDENTITY_INSERT is set to OFF.

Result Image

如果你问我为什么不使用不带query inside参数的普通语句,那是因为我打算做一个换表的循环,我打算使用SET IDENTITY_INSERT

也许我正在跳过一些使用此语句的 SQL 规则。请,我要求解释或其他替代方法来解决它。

【问题讨论】:

【参考方案1】:

EXEC() 命令的内容在与其余代码不同的上下文中运行。该上下文运行、完成,然后您返回到身份插入从未更改过的原始上下文。

如果您想像那样动态地发生这种情况,您必须将整个语句放入@QUERY变量中。

【讨论】:

另见What is the scope of SET IDENTITY_INSERT xyz ON? 太好了,我已经在查询中包含了插入,它运行完美,谢谢!

以上是关于SET IDENTITY_INSERT 在我的参数里面它不起作用的主要内容,如果未能解决你的问题,请参考以下文章

强制 SET IDENTITY_INSERT 从 MS Access 更快生效

IDENTITY_INSERT ON不被实体框架DBSet.Add方法所尊重

SET IDENTITY_INSERT

SET IDENTITY_INSERT ON|OFF 的解惑

set IDENTITY_INSERT on 和 off 的设置

DBCC CHECKIDENT 和SET IDENTITY_INSERT table OFF