SQL Server从一个表复制到另一个表而不使用insert into

时间:2015-09-22 20:01:35

标签: sql sql-server sql-server-2008

我正在尝试将列[ExceptionBit]从一个表复制到另一个表,但我无法使用INSERT INTO,因为IDENTITY_INSERT设置为“关闭”而我不会有权打开它。有没有人知道从一个表复制到另一个表而不必使用INSERT INTO的方法?

以下是我正在尝试执行的代码片段以及错误代码:

SET IDENTITY_INSERT [ReliabilityData].[dbo].[ReferenceDesignator] ON

INSERT INTO [ReliabilityData].[dbo].[ReferenceDesignator] 
        ([ExceptionFlag], [ReferenceDesignatorID]) 
   SELECT [ExceptionFlag], 177375 
   FROM [ReliabilityData].[dbo].[ReferenceDesignator]
   WHERE [ReferenceDesignatorID] = 176839 

Error Message

1 个答案:

答案 0 :(得分:0)

首先,您需要检查一下您的错误消息,因为这不是您在帖子中说话的原因,而是我试图找到您的“真实”的解决方案。问题,你帖子中的评论。

我制作了一个光标,制作了一个假的'然后插入,使用此插入的@@ identity,然后使用where子句中的identity进行更新。

在大多数场景中都不建议使用光标,如果您只将它用于过去的数据一次,在这种情况下会想到这个选项。

注意执行此操作超过1次以防止重复数据,可能是与其可以投放的目标表的连接

CREATE TABLE IDENTITY_TABLE
(
  PRIMARY_KEY INT IDENTITY(1,1),
  COL_2 VARCHAR(20)
)

CREATE TABLE TABLE_2
(
  PRIMARY_KEY INT,
  COL_2 VARCHAR(20)
)


DECLARE @PRIMARY_KEY INT,@COL_2 VARCHAR(20)
DECLARE CURSOR_1 CURSOR FOR 
SELECT PRIMARY_KEY,COL_2 FROM TABLE_2
OPEN CURSOR_1

  FETCH CURSOR_1 
  INTO @PRIMARY_KEY,@COL_2

WHILE @@FETCH_STATUS = 0
BEGIN

  INSERT INTO IDENTITY_TABLE
  VALUES ('TEST1')

  PRINT @@IDENTITY

  UPDATE IDENTITY_TABLE
  SET COL_2 = 
  (
   @COL_2
  )
  WHERE PRIMARY_KEY = @@IDENTITY 

     FETCH CURSOR_1
     INTO @PRIMARY_KEY,@COL_2
  END

CLOSE CURSOR_1;
DEALLOCATE CURSOR_1;