Alter Table修改表結構的錯誤及解決方法
來源:程序員人生 發布時間:2013-12-08 18:28:20 閱讀次數:3803次
SQL Server幫助文檔中,Alter Table對表結構的修改命令,很多都會出現錯誤,下面特針對此常見錯誤做出詳細說明,文章中有引用Leo的方法例題
代碼
一、為標識列添加默認值
下面的示例將修改 CompanyName 列,使其具有默認值:
ALTER TABLE MyCustomers ADD DEFAULT 'Datum Corporation' FOR [CompanyName]
二、如果設置了該列的默認值,那么再對該列結構作修改操作,都將引發錯誤(如刪除或修改該列的默認值等)
如執行:alter table TableName drop column ColumnName語句時就會報錯,如下,
“消息 5074,級別 16,狀態 1,第 1 行
對象'DF__Tb_SalaryPar__aa__7DB89C09' 依賴于 列'aa'。
消息 4922,級別 16,狀態 9,第 1 行
由于一個或多個對象訪問此列,ALTER TABLE DROP COLUMN aa 失敗。”
因為存在了default約束,此時我們需要做的:
1.查找出表中該列的約束名稱
declare @conName varchar(50)
select @conName =b.name from sysobjects b join syscolumns a on b.id = a.cdefault
where a.id = object_id('TableName')
and a.name ='ColumName'
2. 刪除約束刪除該列 即可
exec('alter table TableName drop constraint ' + @conName)
exec('alter table TableName drop column ColumName')
三、其它操作
向表中增加一個address字段:
ALTER TABLE distributors ADD COLUMN [address] varchar(30)
從表中刪除一個字段:
ALTER TABLE distributors DROP COLUMN [address] RESTRICT
在一個操作中修改兩個現有字段的類型:
ALTER TABLE distributors ALTER COMUMN [address] varchar(20)
給一個字段增加一個非空約束:
ALTER TABLE distributors ALTER COLUMN [address] varchar(80) NOT NULL
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈