2015-09-22 84 views
1

我試圖複製一列[ExceptionBit],從一個表到另一個,但我不能使用INSERT INTO因爲IDENTITY_INSERT設置爲'關',我不有權將其打開。有沒有人知道從一張表複製到另一張的方式,而不必使用INSERT INTOSQL Server從一個表複製到另一個沒有使用插入到

下面是一個代碼片段,我嘗試與錯誤代碼一起執行:

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

+2

這是什麼都用[標籤:MySQL的]做什麼? – eggyal

+2

錯誤消息說有不同的東西。它表示要麼'ReliabilityData.dbo.ReferenceDesignator'不存在或者您沒有它的訪問權限。 –

+0

Olivier,它說'[ReliabilityData]。[dbo]。[ReferenceDesignator]'不存在,因爲我試圖將'IDENTITY_INSERT'變成'ON'。我曾表明將它設置爲「開」不是一種選擇。 –

回答

0

首先,你需要檢查你的錯誤消息,因爲這是不是你爲什麼在你的帖子中說話,但無論我試圖找到解決你的'真正'問題,在你的文章中的評論。

我創建了一個遊標,然後使用這個插入的@@標識,然後使用where子句中的標識進行更新。

在大多數場景中不推薦使用遊標,如果您只將它用於過去的數據一次,在這種情況下是想到的選項。

與保重執行此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; 
相關問題