我正在更新我的數據庫以爲表中的每條記錄創建一個GUID列。在SQL Server中生成新的GUID(如果沒有提供)
此表由多個不同的來源填充,其中一些不會爲新記錄提供GUID。
只有在沒有值傳入新記錄時,如何在數據庫端使用newid()填充此列?
我正在更新我的數據庫以爲表中的每條記錄創建一個GUID列。在SQL Server中生成新的GUID(如果沒有提供)
此表由多個不同的來源填充,其中一些不會爲新記錄提供GUID。
只有在沒有值傳入新記錄時,如何在數據庫端使用newid()填充此列?
不要重複不要放置默認列NEWID()
。如果你做的GUID是完全隨機的,如果你在這個列上有任何索引,它將是無用的。如果您打算這樣做,您希望將列的默認設置爲NEWSEQUENTIALID ()
Kimberly Tripp在此主題上有Great Article和另一個Great Article。
要實現NEWSEQUENTIALID ()
作爲默認:
CREATE TABLE foo
(unq_id UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID(),
cola varchar(10));
是的,這是更好的,但請注意,它不會幫助大部分GUID來自應用程序(誰知道它們是如何生成的)。 – 2013-02-11 18:14:55
這張表沒有索引,如果是順序的,我不在乎。最終,我會一直提供GUID值,這可能來自不同的系統,它是唯一的值,並不總是GUID,所以我將此字段作爲NVARCHAR使其更加靈活。 – Slee 2013-02-11 18:21:55
要說這個指數是無用的,這是相當長的一段時間。具有碎片問題的索引對於*不具有所需索引仍然好得多。但仍然是+1的有效解決方案。 – 2013-02-11 18:32:59
您可以將列的默認值設置爲NEWID()
。然後一個GUID將被創建和分配,只有當一個還沒有。
設置列的默認值爲'NEWID()'? – Kermit 2013-02-11 17:19:02
所以如果一個值不存在,那麼NEWID()會填充它而不覆蓋它? – Slee 2013-02-11 17:19:46