4

我在 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

我现有的 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,'') = ''

我需要在 SQL Server 中设置什么来使其工作吗?

编辑:

我得到的错误是

只有在使用列列表并且 IDENTITY_INSERT 为 ON 时,才能为表“#TB_Table_1”中的标识列指定显式值。

4

4 回答 4

4

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

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,'') = ''

然后,启动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

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

于 2012-07-28T00:58:31.530 回答
1

首先,您用于复制表结构的代码不正确。因为它将前 1 行也复制到了新的临时表中。

要仅复制表结构,您可以使用以下代码:

select * INTO #TB_Master_Organization FROM TB_Master_Organization where 1=2

然后,您可以通过在此临时表上设置 IDENTITY INSERT ON 来显式插入数据。

但是您只需编写以下查询即可轻松实现此目的:

select * INTO #TB_Master_Organization FROM TB_Master_Organization where WHERE ISNULL(DeactivatedDate,'') = ''
AND ISNULL(DeactivatedByID,'') = ''

在一个查询中,您将获得临时表中的最终数据。

于 2012-07-28T05:56:11.487 回答
0

我遇到了同样的问题,我isnull在表的标识列中进行了转换,问题已解决ISNULL(P.PersonId,0)

于 2019-02-19T13:07:55.187 回答
-1
SET IDENTITY_INSERT #TB_Master_Organization ON

SELECT COL1,COL2 INTO #TB_Table_1 FROM TB_Table_2

您需要选择要插入新表的所有列并简单地运行。

这对我有用。

于 2018-02-03T12:38:45.210 回答