2012-07-28 61 views
3

我有在SQL Server 2012和2008 R2运行一个存储过程,而在我的SQL Server 2000和2005IDENTITY_INSERT在临时表

请参阅运行良好的一个问题下面的代码:

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中设置使这项工作?

编辑:

,我得到的错误是当使用

在表 “#TB_Table_1”只能指定标识列的显式值的列清单 和IDENTITY_INSERT打开。

+0

SET IDENTITY_INSERT #TB_Master_Organization ON? – anttix 2012-07-28 00:52:53

+0

我也试过,但仍然没有运气。 – zerey 2012-07-28 00:56:31

+1

你有什么错误?你说它不起作用 - 它在做什么? – Charleh 2012-07-28 00:57:52

回答

2

如果临时表有一个标识,使此插入你需要首先:

SET IDENTITY_INSERT #TB_Master_Organization ON 

insert语句之前。

您将需要指定的列插入:

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 

而且,如果这个不行,take a look at this, maybe can help you

+1

。谢谢,但我也尝试过,也没有奏效。 – zerey 2012-07-28 01:37:53

1

这里首先你已经使用复制表结构的所有代码是不是correct.As它拷贝顶部1行也进入你的新临时表。

把刚才复制您可以使用此代码如下表结构:

select * INTO #TB_Master_Organization FROM TB_Master_Organization where 1=2 

然后,你可以通过设置标识插入就这一临时表显式地插入数据。

但你可以很容易地通过只是写这下面的查询实现这一目标:

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

在这里,在一个查询,你会得到你的临时表的最终数据。

0
SET IDENTITY_INSERT #TB_Master_Organization ON 

SELECT COL1,COL2 INTO #TB_Table_1 FROM TB_Table_2 

您需要选择您想要插入到一个新表中的所有列,然后运行。

这对我有用。