[英]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.