2013-02-11 43 views
12

我正在更新我的數據庫以爲表中的每條記錄創建一個GUID列。在SQL Server中生成新的GUID(如果沒有提供)

此表由多個不同的來源填充,其中一些不會爲新記錄提供GUID。

只有在沒有值傳入新記錄時,如何在數據庫端使用newid()填充此列?

+2

設置列的默認值爲'NEWID()'? – Kermit 2013-02-11 17:19:02

+0

所以如果一個值不存在,那麼NEWID()會填充它而不覆蓋它? – Slee 2013-02-11 17:19:46

回答

23

不要重複不要放置默認列NEWID()。如果你做的GUID是完全隨機的,如果你在這個列上有任何索引,它將是無用的。如果您打算這樣做,您希望將列的默認設置爲NEWSEQUENTIALID ()

Kimberly Tripp在此主題上有Great Article和另一個Great Article

要實現NEWSEQUENTIALID ()作爲默認:

CREATE TABLE foo 
(unq_id UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID(), 
cola varchar(10)); 

Full SQL Fiddle example.

+1

是的,這是更好的,但請注意,它不會幫助大部分GUID來自應用程序(誰知道它們是如何生成的)。 – 2013-02-11 18:14:55

+0

這張表沒有索引,如果是順序的,我不在乎。最終,我會一直提供GUID值,這可能來自不同的系統,它是唯一的值,並不總是GUID,所以我將此字段作爲NVARCHAR使其更加靈活。 – Slee 2013-02-11 18:21:55

+3

要說這個指數是無用的,這是相當長的一段時間。具有碎片問題的索引對於*不具有所需索引仍然好得多。但仍然是+1的有效解決方案。 – 2013-02-11 18:32:59

5

您可以將列的默認值設置爲NEWID()。然後一個GUID將被創建和分配,只有當一個還沒有。