Identity_insert 在临时表中

zer*_*rey 4 sql sql-server

我在 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”中标识列的显式值。

Gon*_*o.- 5

如果您的临时表有一个身份,要进行此插入,您需要首先:

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)

另外,如果这不起作用,看看这个,也许可以帮助你