2010-04-29 26 views
3

我想是這樣的,但id的值沒有變化,得到第一記錄的值和所有其餘的值設置爲表2 ...我想插入從表1的值與incremantal值

insert into table1 (Id,b,c,d) 
(select (select max(Id)+1 from table1),x,y,z from table2 where...) 
+0

您正在使用哪種數據庫產品? SQL Server?甲骨文?還有別的嗎? – 2010-04-29 16:33:03

+1

即時通訊使用mssql 2005這一個。 – adnanturken 2010-04-29 16:36:48

+1

你知道這不會是併發安全的(沒有鎖定table1),是嗎? – 2010-04-29 16:37:47

回答

6

使用identity column。然後,你可以這樣做:

INSERT INTO table1 (b, c, d) 
SELECT x, y, z 
FROM table2 
WHERE ... 

如果你不想使用自動增量列,您可以通過加入該行的行號,而不是一直在增加1.這句法獲得同樣的效果在幾乎所有主流SQL數據庫中都可以使用(不是MySQL):

INSERT INTO table1 (Id, b, c, d) 
SELECT 
    (SELECT MAX(Id) FROM table1) + ROW_NUMBER() OVER (ORDER BY x), 
    x, y, z 
FROM table2 
WHERE ... 
+0

謝謝..那工作 – adnanturken 2010-04-29 16:45:16