2012-03-13 132 views
0

遞增ID如果我運行一個查詢是這樣的:批量插入一個VARCHAR ID字段

insert into table (unique_id, column) 
select 
(isnull(max(cast(unique_id as int)), 1) + 1 from table) as id, 
another_column 
from another_table 

的UNIQUE_ID場永遠是爲1和不增加。插入時有沒有辦法增加這個增量?

PS這是我做的一個簡單的版本,但該例子的準確性

編輯:SQL Server 2008中

感謝

+0

嚴重:只需使用一個「INT IDENTITY」列 - 這將爲您節省** sooo很多麻煩和悲傷,這是完全不值得的。 – 2012-03-13 13:11:05

+0

這是一個有10年曆史的程序,大約有200個表格。雖然我更喜歡它,但這不可能:) – webnoob 2012-03-13 13:18:13

回答

1

使用標識(MSSQL),AUTO_INCREMENT(MySQL的)或序列(psql/oracle /任何其他適當的DB)。

+0

我知道我可以使用身份,但我想查看是否可以符合我的SQL? – webnoob 2012-03-13 12:57:51

+0

@webnoob我不認爲你可以用你的方式做到這一點。在插入任何數據之前,'max(unique_id)'(和任何其他類似的表達式)被計算一次。這是它必須如何工作,你不能改變它。 – kan 2012-03-13 13:22:37

+0

我想盡可能多。感謝您的澄清。 – webnoob 2012-03-13 13:25:23

1

爲MSSQL 2005+

insert into [table] (unique_id, [column]) 
select row_number() over (order by another_column) as id, 
another_column from another_table 

insert into [table] (unique_id, [column]) 
select row_number() over (order by newid()) as id, 
another_column from another_table 
+0

如果表中已經有ID的值,會發生什麼?我不會結束重複的ID? – webnoob 2012-03-13 13:06:10

1

看看在ROW_NUMBER()功能。

INSERT INTO [table] (unique_id, [column]) 
SELECT  ROW_NUMBER() OVER (ORDER BY another_column) AS id, 
      another_column 
FROM  another_table 

這是a working example that you can play with

注意:這並不能確保您使用ROW_NUMBER()生成的ID在要插入的表中是唯一的。

+0

如果表中已經有ID的值,會發生什麼?我不會結束重複的ID? – webnoob 2012-03-13 13:05:52

+0

是的,它肯定會重複該ID(或基於約束生成錯誤)。 – 2012-03-13 13:10:23

+0

好的,看起來像我需要使用身份然後。謝謝。 – webnoob 2012-03-13 13:11:49