--SQL大量刪除資料表中指定欄位對應的所有約束
--定義要操作的資料表名變數
declare @TableName nvarchar(250)
set @TableName='資料表名'
--定義要操作的欄位名變數
declare @ColumnName nvarchar(250)
set @ColumnName='欄位名'
--定義當前查詢的約束變數
declare @ConstraintName varchar (250)
--聲明讀取資料表中指定欄位對應的所有約束列表遊標
declare mycursor cursor for select name from sysobjects left join sysconstraints on sysconstraints.constid=sysobjects.id where parent_obj=OBJECT_ID(''+@TableName+'') and colid=(select colid from syscolumns where id=OBJECT_ID(''+@TableName+'') and OBJECTPROPERTY(id, N'IsUserTable') = 1 and upper(name)=upper(@ColumnName))
--開啟遊標
open mycursor
--從遊標裡取出資料賦值到主鍵約束名稱變數中
fetch next from mycursor into @ConstraintName
--如果遊標執行成功
while (@@fetch_status=0)
begin
--刪除當前找到的約束
--print '當前刪除語句'+'ALTER TABLE ['+@TableName+'] DROP CONSTRAINT ['+@ConstraintName+']'
exec ('ALTER TABLE ['+@TableName+'] DROP CONSTRAINT ['+@ConstraintName+']')
print '已成功刪除資料表['+@TableName+']欄位['+@ColumnName+']對應的約束['+@ConstraintName+']'
--用遊標去取下一條記錄
fetch next from mycursor into @ConstraintName
end
--關閉遊標
close mycursor
--撤銷遊標
deallocate mycursor
--以上程式已測試:測試環境Windows2003+SQL2008 SERVER R2