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 COLUMN [address] varchar(20)
給一個字段增加一個非空約束:
ALTER TABLE distributors ALTER COLUMN [address] varchar(80) NOT NULL