爲了使它更清楚,我有這樣的的SQL Server 2008 ::如何使用ALTER TABLE添加具有在另一列中的每個唯一值唯一編號的新列
Batch domain
---------------
14 xyz.com
14 abc.com
15 abc.com
15 xyz.com
我想要一個表每個域具有唯一編號的第三列,無關它們來自哪批。
爲了使它更清楚,我有這樣的的SQL Server 2008 ::如何使用ALTER TABLE添加具有在另一列中的每個唯一值唯一編號的新列
Batch domain
---------------
14 xyz.com
14 abc.com
15 abc.com
15 xyz.com
我想要一個表每個域具有唯一編號的第三列,無關它們來自哪批。
通常你不會通過添加一列來做到這一點。您需要的是爲具有稱爲DomainID的標識字段的域添加表。然後批處理域表存儲該ID而不是域名,並且它加入域表以獲取名稱。
要回答你的問題,可以使用NEWID()
和NEWSEQUENTIALID()
。
請注意,作爲函數,可以通過觸發器/存儲過程/查詢調用Newid,但NEWSEQUENTIALID只能設置爲uniqueidentifier
類型的列的DEFAULT
值。
兩者都有限制,如果發生停電事件,SEQUENTIAL ID可能被猜測或導致集羣,但是如果安全性不值該值,則可以對其進行管理。
ALTER TABLE [Schema_Name].[Table_Name]
ADD DomainID uniqueidentifier DEFAULT (NEWSEQUENTIALID())
雖然它的日期,Dave Pinal之間有一個很好的解釋。
添加了列數據類型 –
我完全理解你的意思,我通常會這樣做,但由於當前的數據庫條件,我想通過添加一列而不是創建另一個表來解決此問題。 –
然後,您唯一的選擇是通過觸發器進行維護,並確保處理競爭條件。 – HLGEM