2010-07-06 82 views
1

我試圖從臨時表插入列,並希望ID列順序遞增。我使用下面的代碼,但沒有得到被插入:插入ID列表

INSERT INTO TestDataTable 
SELECT Code, Description, ParentID FROM TempTable 

請告訴我,我怎麼能得到這個工作。

+0

「TestDataTable」的模式是什麼? – Jon 2010-07-06 03:37:58

回答

1

您需要將ID設爲IDENTITY column。所以在你的select語句中,應該這樣做:

INSERT INTO TestDataTable 
SELECT ID = IDENTITY(INT,1,1), Code, Description, ParentID FROM TempTable 
1

我會說你有兩個選擇。首先是在目標表的數據定義語言中處理它。請參閱爲MS SQL Server編寫的代碼示例。

CREATE TABLE #A ( 
    Id INT NOT NULL IDENTITY(1,1) PRIMARY KEY 
, Code VARCHAR(10) NOT NULL) 

CREATE TABLE #B (
    Code VARCHAR(10) NOT NULL) 

INSERT INTO #B VALUES ('alpha') 
INSERT INTO #B VALUES ('beta') 
INSERT INTO #B VALUES ('gamma') 
INSERT INTO #B VALUES ('delta') 

INSERT INTO #A (Code) 
SELECT Code 
FROM #B 

SELECT * 
FROM #A 

DROP TABLE #A 
DROP TABLE #B 

如果不允許目標表的DDL來處理,那麼你可以完成你需要的方式被指定爲這樣的表,如果你知道它會是空的。

CREATE TABLE #A (
    Id INT NOT NULL PRIMARY KEY 
, Code VARCHAR(10) NOT NULL) 

CREATE TABLE #B (
    Code VARCHAR(10) NOT NULL) 

INSERT INTO #B VALUES ('alpha') 
INSERT INTO #B VALUES ('beta') 
INSERT INTO #B VALUES ('gamma') 
INSERT INTO #B VALUES ('delta') 

INSERT INTO #A (Id, Code) 
SELECT ROW_NUMBER() OVER (ORDER BY Code), Code 
FROM #B 

SELECT * 
FROM #A 

DROP TABLE #A 
DROP TABLE #B 

我絕對推薦第一種方法。它更簡單,您不必擔心處理代碼中的自動增量。