簡體   English   中英

如果為null,如何在sql中生成uniqueidentifier

[英]How to generate a uniqueidentifier in sql if null

我試圖將一列添加到現有SQL表的uniqueidentifier類型。 該列不能為空,當然也不能唯一。 我嘗試了這段代碼:

ALTER TABLE ScheduleJobs ADD CurrentInstanceID uniqueidentifier not null

其次是:

ALTER TABLE ScheduleJobs ADD CONSTRAINT DF_CurrentInstanceID DEFAULT newsequentialid() FOR CurrentInstanceID

但是,當我從C#創建新記錄時,uniqueidentifier總是全零(大概為null。)我可以在C#中創建GUID,並在創建新記錄時將其傳遞給sql,但效果很好,但我擔心可以創建一個重復的GUID。 根據我的閱讀,這似乎是一種極為罕見的情況,但總是存在着任何潛在的錯誤浮出水面的壞習慣。 請注意,該字段將不是表的PK。 為了教育起見,歡迎提出建議和意見。

我在MS SQL SERVER 2008中使用C#4.0框架

很抱歉造成您的延遲,但是我很高興地說我已經解決了這個問題。 感謝大家的大力支持。 雖然沒有人能完全打定主意(並且有一些非常好的建議),但埃爾多格提出了Entity Framework的意見不佳。 多虧了他,我才用Googled Entity Framework + GUID找到了解決方案。

本文逐步解決了該問題,並對問題,解決方案以及解決此問題的步驟進行了很好的解釋。 我將注意到,我決定逐步進行並測試一個步驟,而不必執行最后一步。 這使我相信,部分問題可能已在更高版本的實體框架中得到解決。

我只是在設計視圖(不是xml)中拉出edmx文件,並將StoreGeneratedPattern屬性設置為“ Identity”。

再次感謝您的幫助和建議。 你真是棒極了。

創建記錄時,您的C#代碼是否嘗試傳遞CurrentInstanceID? 如果是這樣,您可以從INSERT語句中刪除該列嗎?

我們使用數字主鍵來實現。 我們的C#代碼為記錄上的CRUD操作調用存儲過程。 C#代碼在客戶端生成一個否定密鑰供其自己使用。 准備好創建記錄時,它將把此密鑰傳遞給存儲過程。

proc會忽略此鍵並插入其余數據。 proc的輸出是SQL分配給記錄的實際鍵。 最后,C#代碼將新密鑰合並到現有數據中。

我不會為此使用GUID。 GUID在Windows的許多操作中都使用過,因此,它不是一個僅在您的應用程序中 唯一的標識符 ,而是一個在操作系統中唯一標識符 除非這對您有幫助,否則我不會使用。

您可以使用增量值,例如簡單的uint 如果表中已有數據,則可以編寫一個腳本,用新列的增量值填充現有行,並在執行該腳本后將唯一約束添加到列中。

在原始的“創建”表或“更改”表中,使用如下所示的內容

create table ScheduleJobs (keyval int, id2 uniqueidentifier not null default newsequentialid())

然后不要引用插入內容中的列,而是將添加一個新的GUID值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM