我在 SQL Server 2012 和 2008 R2 中运行存储过程时遇到问题,而它在 SQL Server 2000 和 2005 中运行良好。
请看下面的代码:
SELECT * INTO #TB_Table_1
FROM (SELECT TOP 1 * FROM TB_Table_2) A
TRUNCATE TABLE #TB_Table_1
Run Code Online (Sandbox Code Playgroud)
我现有的 sp 有此代码。目的只是复制 的结构TB_Table_2。
注意:TB_Table_2有一个标识列Master_ID。
接下来,我将尝试使用以下代码插入数据。这就是我遇到麻烦的地方。
INSERT INTO #TB_Table_1
SELECT * FROM TB_Table_2
WHERE ISNULL(Date,'') = ''
AND ISNULL(ID,'') = ''
Run Code Online (Sandbox Code Playgroud)
我需要在 SQL Server 中设置一些东西才能使其工作吗?
编辑:
我得到的错误是
仅当使用列列表且 IDENTITY_INSERT 为 ON 时,才能指定表“#TB_Table_1”中标识列的显式值。
如果您的临时表有一个身份,要进行此插入,您需要首先:
SET IDENTITY_INSERT #TB_Master_Organization ON
Run Code Online (Sandbox Code Playgroud)
在插入语句之前。
您需要指定要插入的列:
INSERT INTO #TB_Master_Organization (col1, col2, col3..)
SELECT * FROM TB_Master_Organization
WHERE ISNULL(DeactivatedDate,'') = ''
AND ISNULL(DeactivatedByID,'') = ''
Run Code Online (Sandbox Code Playgroud)
然后,启动identity_Insert。
所以,你得到了:
SET IDENTITY_INSERT #TB_Master_Organization ON
INSERT INTO #TB_Master_Organization (col1, col2, col3..)
SELECT * FROM TB_Master_Organization
WHERE ISNULL(DeactivatedDate,'') = ''
AND ISNULL(DeactivatedByID,'') = ''
SET IDENTITY_INSERT #TB_Master_Organization OFF
Run Code Online (Sandbox Code Playgroud)
另外,如果这不起作用,看看这个,也许可以帮助你