2012-02-24 108 views
2

我有一個SQL INSERT語句如下所示:SQL Server的INSERT語句自動增量

insert into mytable(ID,Keyindex,KeyValue) 
select Id,1,GenreID 
from mytable2 

原本應該填充我的表像數據:

id          GenreID ColumnB 
0006342c-47bc-436a-a23a-3b40360d9a30 16  1 
0006342c-47bc-436a-a23a-3b40360d9a30 19  1 
00109775-f0f8-463e-8134-f842aac8b5df 12  1 
001211e3-9bf8-45ad-8297-7a0a94aaf06e 13  1 
0025218a-9624-4f5e-86cc-f1cfe862cd2a 16  1 
0025218a-9624-4f5e-86cc-f1cfe862cd2a 11  1 
0025218a-9624-4f5e-86cc-f1cfe862cd2a 15  1 

問題是ID,GenreId和ColumnB是主鍵,我正在插入一個常量值「1」,導致主鍵違規。

如何插入表格,使得ColumnB得到一個值incrementaly如果ID是相同的填充。

例如:

id          GenreID ColumnB 
0006342c-47bc-436a-a23a-3b40360d9a30 16  1 
0006342c-47bc-436a-a23a-3b40360d9a30 19  2 
00109775-f0f8-463e-8134-f842aac8b5df 12  1 
001211e3-9bf8-45ad-8297-7a0a94aaf06e 13  1 
0025218a-9624-4f5e-86cc-f1cfe862cd2a 16  1 
0025218a-9624-4f5e-86cc-f1cfe862cd2a 16  2 
0025218a-9624-4f5e-86cc-f1cfe862cd2a 16  3 
+3

工作,這RDBMS使用的是? – 2012-02-24 20:57:15

+0

第一部分中的列名與第二部分中顯示的名稱不同步。 – 2012-02-24 20:58:57

+1

因此,如果GenreID和ColumnB的組合不會唯一,那麼您只需要ColumnB增量?聽起來就像你需要一個觸發器。 – davidethell 2012-02-24 21:00:25

回答

0

一個骯髒的黑客是使用id - someNumberid + someNumber,而不是僅僅1

如果這是一次「火災和遺忘」一次性操作,可接受什麼?

如果您必須檢查唯一性,那麼觸發器就是解決方案。

-1

你可以嘗試對重複選項:

insert into mytable(ID,Keyindex,KeyValue) 
select Id,1,GenreID 
from mytable2 
ON DUPLICATE KEY UPDATE Keyindex = Keyindex+1; 
+0

注意這是未經測試的。只是一個快速的想法。根據需要修改。 – davidethell 2012-02-24 21:04:17

+0

如果你不使用MySQL,看看這個鏈接:http://stackoverflow.com/questions/1197733/does-sql-server-offer-anything-like-mysqls-on-duplicate-key-update – diaho 2012-02-24 21:07:19

+0

消息156 ,級別15,狀態1,行2 關鍵字'ON'附近的語法錯誤。 – Milligran 2012-02-24 21:39:37

1

你的問題是有點混亂。在「例如」部分,它看起來像0025218a-9624-4f5e-86cc-f1cfe862cd2a的genreID應該是16,17,19而不是16,16,16

假設我理解你正確的,不過,你可以使用ROW_NUMBER() OVER由ID劃分。像下面這樣的東西應該工作:

insert into mytable(ID,Keyindex,KeyValue) 
select id, GenreID , ROW_NUMBER() OVER (Partition by id order by id) as ColumnB 
from  mytable2 
order by id, 
     genereid 

注意:您沒有指定版本,但是這將在SQL 2005+