นอกจากนี้คุณยังสามารถวางคอลัมน์และข้อ จำกัด ลงในคำสั่งเดียวแทนที่จะเป็นรายบุคคล
CREATE TABLE #T
(
Col1 INT CONSTRAINT UQ UNIQUE CONSTRAINT CK CHECK (Col1 > 5),
Col2 INT
)
ALTER TABLE #T DROP CONSTRAINT UQ ,
CONSTRAINT CK,
COLUMN Col1
DROP TABLE #T
SQL แบบไดนามิกบางตัวที่จะค้นหาชื่อของข้อ จำกัด การตรวจสอบที่ขึ้นอยู่กับและข้อ จำกัด เริ่มต้นและปล่อยพวกเขาพร้อมกับคอลัมน์ด้านล่าง
(แต่ไม่ใช่การขึ้นต่อกันของคอลัมน์อื่น ๆ ที่เป็นไปได้เช่นกุญแจต่างประเทศ, ข้อ จำกัด เฉพาะและคีย์หลัก, คอลัมน์ที่คำนวณ, ดัชนี)
CREATE TABLE [dbo].[TestTable]
(
A INT DEFAULT '1' CHECK (A=1),
B INT,
CHECK (A > B)
)
GO
DECLARE @TwoPartTableNameQuoted nvarchar(500) = '[dbo].[TestTable]',
@ColumnNameUnQuoted sysname = 'A',
@DynSQL NVARCHAR(MAX);
SELECT @DynSQL =
'ALTER TABLE ' + @TwoPartTableNameQuoted + ' DROP' +
ISNULL(' CONSTRAINT ' + QUOTENAME(OBJECT_NAME(c.default_object_id)) + ',','') +
ISNULL(check_constraints,'') +
' COLUMN ' + QUOTENAME(@ColumnNameUnQuoted)
FROM sys.columns c
CROSS APPLY (SELECT ' CONSTRAINT ' + QUOTENAME(OBJECT_NAME(referencing_id)) + ','
FROM sys.sql_expression_dependencies
WHERE referenced_id = c.object_id
AND referenced_minor_id = c.column_id
AND OBJECTPROPERTYEX(referencing_id, 'BaseType') = 'C'
FOR XML PATH('')) ck(check_constraints)
WHERE c.object_id = object_id(@TwoPartTableNameQuoted)
AND c.name = @ColumnNameUnQuoted;
PRINT @DynSQL;
EXEC (@DynSQL);