混淆的IDENTITY_INSERT错误,表示它已经在另一个表中打开

15

我正在尝试使用VBA从文本文件重建数据库。为了插入ID值,在发送INSERT之前,我调用了以下代码:

SET IDENTITY_INSERT TableName ON

这对大多数TableNames似乎工作正常,但是当我在表 'Accounts' 上调用它时,我会得到一个有趣的错误:

"IDENTITY_INSERT is already ON for table 'test.dbo.PropertyAssets'. Cannot perform SET operation for table 'Accounts'."

我猜这可能与fkey约束有关,但有没有人确定的?


1
错误信息非常清晰:您打开了 PropertyAssets 的标识插入,但从未关闭它。 - user330315
1
在任何时候,一个会话中只能有一个表的IDENTITY_INSERT属性被设置为ON。 - GSerg
1
啊。嗯,从错误信息本身来看肯定是不清楚的,但我明白了大意。这变得越来越难了。 - Maury Markowitz
2个回答

26

您只能在会话中为一张表启用 IDENTITY_INSERT。如果要在多张表上使用它,则需要始终设置为 ONOFF,请参考以下模板:

SET IDENTITY_INSERT TableName ON

--insert values with IDs

SET IDENTITY_INSERT TableName OFF 

SET IDENTITY_INSERT PropertyAssets ON

--insert value with IDs

SET IDENTITY_INSERT PropertyAssets OFF

5

您只需要另一个会话。我只是重新连接到相同的数据库,而且没有出现任何问题。 当然,我在最后更改了脚本,将IDENTITY_INSERT设置为OFF。


我重新连接了其他用户会话,它运行得非常顺利,没有任何问题。 - Maximiliano Cesán

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接