2012-02-09 37 views
3

我有這樣的代碼:如何更新在SQL Azure中的身份列?可能嗎?

ALTER TABLE FishSticks 
ADD MyNewIdentityColumnId INT IDENTITY(1,1) NOT NULL 

SET IDENTITY_INSERT FishSticks ON 

UPDATE FishSticks 
SET MyNewIdentityColumnId = MyOldColumnId 

但是它說:

無法更新標識列 'MyNewIdentityColumnId'。

我認爲這是由於SQL Azure,但我沒有太多的成功谷歌搜索。看起來,在保存數據的同時將列更改爲標識是一個巨大的難題。

回答

3

SET IDENTITY_INSERT僅適用於刀片和該錯誤不是特定於SQL Azure的。您將在SQL Server/Express上得到相同的錯誤

要解決問題,請將IDENTITY_INSERT設置爲ON,將要替換爲標識值的現有行的所有列值重新插入新值SET IDENTITY_INSERT OFF,然後刪除前一行。

+0

謝謝,這是一個好主意:) – NibblyPig 2012-02-10 09:03:46

+0

另一種方法,沿着相同的路線,爲表複製到新表完全(假設FishSticks2),請將您的MyNewIdentityColumnId插入期間MyOldColumnId,刪除原始表,將FishSticks2重命名爲FishSticks。 – 2012-02-11 15:41:45

+0

它將與Azure的,如果你使用完整的INSERT命令,即包括所有列名纔有效。 – 2013-11-21 14:00:54

0

我發現這個Possible solution從埃爾韋Roggero誰基本上給關掉ID,然後加入行,然後重新打開ID的方式。

+0

我覺得他的示例工作,因爲他是插入數據,而我更新的數據。 – NibblyPig 2012-02-09 16:10:50