本文將介紹利用 SQL Server 匯入匯出精靈,匯入資料時目的端含有 identity 資料行的小技巧。
【問題描述】
在 Super SQL Server 中有朋友問到他有兩個資料表,其資料表結構均相同,分別為 T1 和 T2,但這兩個資料表都有一 NO 資料行為 Identity(自動加號),該資料行既不是 Primary Key 也沒設定 Index,想要從 T2 把資料透過 SQL Server 匯入匯出精靈匯到 T1,卻一直發生失敗,筆者作了下一節的實驗來嘗試模擬發問者的狀況。
【實作步驟】
首先以下列 T-SQL 建立測試資料表 T1 和 T2:
--建立測試資料表 IF OBJECT_ID('T1','U') IS NOT NULL DROP TABLE T1 GO CREATE TABLE [dbo].[T1]( [NO] [INT] IDENTITY(1,1) NOT NULL, [Name] [VARCHAR](50) NOT NULL, CONSTRAINT [PK_T1] PRIMARY KEY CLUSTERED ( [Name] ASC )) IF OBJECT_ID('T2','U') IS NOT NULL DROP TABLE T2 GO CREATE TABLE [dbo].T2( [NO] [INT] IDENTITY(1,1) NOT NULL, [Name] [VARCHAR](50) NOT NULL, CONSTRAINT [PK_T2] PRIMARY KEY CLUSTERED ( [Name] ASC )) GO --建立測試資料 INSERT INTO T1(Name) VALUES ('SQL Server 2000'),('SQL Server 2005') INSERT INTO T2(Name) VALUES ('SQL Server 2008'),('SQL Server 2008 R2'), ('SQL Server 2012') GO SELECT * FROM t1 SELECT * FROM t2
執行結果如下:
接著開啟 SQL Server 匯入匯出精靈,於【選擇資料來源】步驟中輸入來源資料庫的伺服器名稱及驗證資訊。
於【選擇目的地】步驟中輸入您要匯入資料的目的伺服器名稱及其驗證資訊。筆者為簡便示範作業,將 T1 和 T2 建立在同一個資料庫。
在【指定資料表複製或查詢】步驟中,使用預設值【從一個或多個資料表或檢視表複製資料】。
勾選資料表 T2 為來源資料表,並選擇目的地為 T1 資料表後按下方的【編輯對應】。
接著將來源資料行 NO 所對應的目的地資料行設定為【忽略】,然後按確定。
於【儲存並執行封裝】步驟中按下一步或直接按完成。
最後確認您在精靈中所選擇的資訊後按完成開始進行匯入匯出的作業。
若沒問題您將會看到如下圖的結果,T2 資料表的 3 筆資料已經匯入到 T1。
直接下 T-SQL 查詢 T1 資料表,的確資料已經匯進來。