刪除資料庫表中的字段時,使用了 :alter table 表名 drop column 列名
伺服器返回的錯誤為:
server: msg 5074, level 16, state 1, line 1
the object 約束名 is dependent on column 列名.
server: msg 4922, level 16, state 1, line 1
alter table drop column 列名 failed because one or more objects access this column.
解決方法是先刪除所有關於這一列的約束,然後在開始刪除這一列
下面的**為刪除表 b_file 中的 name 列。
declare@sqlcmd
nvarchar(1024
);declare
@tbname
nvarchar(180), --
要處理的表名
@fdname
nvarchar(180), --
要處理的欄位名
@delfield
bit=1--
0只刪除關係,1同時刪除字段
set@tbname='
b_file';
set@fdname='
name';
begin
--定義游標.
declare c_test_main cursor fast_forward for
--預設值約束
select sql=
'alter table [
'+b.name+
'] drop constraint [
'+d.name+']
'from
syscolumns a
join sysobjects b on a.id=b.id and a.name=
@fdname
and b.name=
@tbname
join syscomments c on a.cdefault=
c.id
join sysobjects d on c.id=
d.id
union
--外來鍵引用
select s=
'alter table [
'+c.name+
'] drop constraint [
'+b.name+']
'from
sysforeignkeys a
join sysobjects b on b.id=
a.constid
join sysobjects c on c.id=
a.fkeyid
join syscolumns d on d.id=c.id and a.fkey=d.colid and d.name=
@fdname
join sysobjects e on e.id=a.rkeyid and e.name=
@tbname
join syscolumns f on f.id=e.id and a.rkey=
f.colid
union
--主鍵/唯一鍵/索引
select
case
when e.xtype in('
pk','
uq') then
'alter table [
'+c.name+
'] drop constraint [
'+e.name+']
'else
'drop index [
'+c.name+
'].[
'+a.name+']
'end
from
sysindexes a
join sysindexkeys b on a.id=b.id and a.indid=
b.indid
join sysobjects c on b.id=c.id and c.xtype='u
'and c.name=
@tbname
join syscolumns d on b.id=d.id and b.colid=d.colid and d.name=
@fdname
left
join sysobjects e on e.id=
object_id
(a.name)
where a.indid not
in(0,255
)
--開啟游標.
open
c_test_main;
--填充資料.
fetch
next
from c_test_main into
@sqlcmd
;
--假如檢索到了資料,才處理.
while
@@fetch_status=0
begin
@sqlcmd
;
exec sp_executesql @sqlcmd;--
執行約束的刪除操作
--填充下一條資料.
fetch
next
from c_test_main into
@sqlcmd
;
end;
--關閉游標
close
c_test_main;
--釋放游標.
deallocate
c_test_main;
end;
if@delfield=1
begin
--判斷表是否存在
--if exists (select 1 from sys.tables where name=@tbname and type = 'u')
--判斷列是否存在
ifcol_length(@tbname, @fdname) is
notnull
exec('
alter table ['+
@tbname+'
] drop column ['+
@fdname+'
]')
end
表字段的處理 Sql Server
目錄 表的建立 建立約束 檢視約束 刪除約束 插入資料 增加字段 刪除字段 create table student 學號 char 8 not null,姓名 char 8 not null,性別 char 2 not null,出生日期 date default getdate 班級 char ...
Oracle 刪除新增表字段
原文 1.新增字段 alter table 表名 add 字段 字段型別 default 輸入預設值 null not null 2.新增備註 comment on column 庫名.表名.欄位名 is 輸入的備註 如 我要在ers data庫中 test表 document type欄位新增備註...
對Sql Server表字段進行修改
通用式 alter table 表名 add 欄位名 字段屬性 default 預設值 default 是可選引數 增加字段 alter table 表名 add 欄位名 smallint default 0 增加數字字段,整型,預設值為0 alter table 表名 add 欄位名 int de...