MSSQL刪除欄位時出現 伺服器: 訊息 5074,級別 16,狀態 1,行 1 的解決辦法
阿新 • • 發佈:2019-01-28
有的朋友在做使用者維護欄位的介面時,肯定發現一個問題,當用指令碼:
ALTER TABLE 表名 DROP COLUMN 欄位名
進行刪除欄位的操作時,會出現“伺服器: 訊息 5074,級別 16,狀態 1,行 1 ”的錯誤,這是因為欄位有了預設值,不過可以通過清除掉預設值的儲存過程來進行這個操作,但如果在刪除欄位前,強行執行
sp_unbindefault '表名.欄位名'
這樣的操作,如果欄位沒有預設值,卻會產生一個異常,雖然不會影響操作的結果,但這樣會讓使用者摸不著頭腦。
為了解決這個矛盾的問題,有一個辦法:先檢查欄位是否繫結有預設值,如果有的話才執行sp_unbindefault '表名.欄位名' ,否則不執行,這樣就不會出現錯誤提示的尷尬局面。
檢查的方法是:
SELECT syscolumns.cdefault
FROM sysobjects LEFT OUTER JOIN
syscolumns ON syscolumns.id = sysobjects.id
WHERE (sysobjects.name = '表名') AND (syscolumns.name = '欄位名')
如果cdefault<>0則表示沒有預設值,需要執行sp_unbindefault '表名.欄位名',反之則不需要。
ALTER TABLE 表名 DROP COLUMN 欄位名
進行刪除欄位的操作時,會出現“伺服器: 訊息 5074,級別 16,狀態 1,行 1 ”的錯誤,這是因為欄位有了預設值,不過可以通過清除掉預設值的儲存過程來進行這個操作,但如果在刪除欄位前,強行執行
sp_unbindefault '表名.欄位名'
這樣的操作,如果欄位沒有預設值,卻會產生一個異常,雖然不會影響操作的結果,但這樣會讓使用者摸不著頭腦。
為了解決這個矛盾的問題,有一個辦法:先檢查欄位是否繫結有預設值,如果有的話才執行sp_unbindefault '表名.欄位名'
檢查的方法是:
SELECT syscolumns.cdefault
FROM sysobjects LEFT OUTER JOIN
syscolumns ON syscolumns.id = sysobjects.id
WHERE (sysobjects.name = '表名') AND (syscolumns.name = '欄位名')
如果cdefault<>0則表示沒有預設值,需要執行sp_unbindefault '表名.欄位名',反之則不需要。