大致是这样:你的表在@tbl。declare @c table(row int identity primary key,command varchar(8000)) insert @c(command) select 'alter table '+@tbl+' drop constraint '+name from sysconstraints where parent_obj=object_id(@tbl) and type in ('F','K',C') declare @p int,@s varchar(8000) set @p=1 while @p<=(select max(row) from @c) begin select @s=command from @c where row=@p exec(@s) set @p=@p+1 end 注: 'F','K',C'只是例子,你还可以删除更多类型的约束。 也许需要删除其它表对此表的外键,才能删除此表的主键等信息,这时候,可以在上边 select之前写另一个查询(用union all并列),从sysforeignkeys中捡出所有引用本表的外键,也从那些表中删除那些约束(实际是外键约束)。
declare @a varchar(20) select @a=c.name from syscolumns a,sysconstraints b,sysobjects c where a.id=object_id('表名') and a.name='主鍵列名' and a.id=b.id and b.constid=c.id and c.name like 'PK%' exec('alter table 表名 drop constraint '+@a)
insert @c(command)
select 'alter table '+@tbl+' drop constraint '+name
from sysconstraints where parent_obj=object_id(@tbl)
and type in ('F','K',C')
declare @p int,@s varchar(8000)
set @p=1
while @p<=(select max(row) from @c)
begin
select @s=command from @c where row=@p
exec(@s)
set @p=@p+1
end
注:
'F','K',C'只是例子,你还可以删除更多类型的约束。
也许需要删除其它表对此表的外键,才能删除此表的主键等信息,这时候,可以在上边 select之前写另一个查询(用union all并列),从sysforeignkeys中捡出所有引用本表的外键,也从那些表中删除那些约束(实际是外键约束)。
select @a=c.name from syscolumns a,sysconstraints b,sysobjects c where a.id=object_id('表名') and a.name='主鍵列名' and a.id=b.id and b.constid=c.id and c.name like 'PK%'
exec('alter table 表名 drop constraint '+@a)