【发布时间】:2014-05-08 19:25:04
【问题描述】:
在删除 SQL Server 2005 中具有约束的列时出现以下错误。
对象“DF__PlantRecon__Test”依赖于列“Test”。
该列不是任何键的一部分。但它有一个default 约束,并且该约束有一个预定义的名称。
虽然我已经编写了代码先删除约束,但它不起作用。
- 为什么不起作用?
- 需要做什么才能使其正常工作?
注意:我需要先检查约束是否存在。
参考文献
- Named CONSTRAINT benefits
- How to drop column with constraint?
- How to drop SQL default constraint without knowing its name?
代码
IF OBJECT_ID('DF__PlantRecon__Test', 'C') IS NOT NULL
BEGIN
SELECT 'EXIST'
ALTER TABLE [dbo].[PlantReconciliationOptions] drop constraint DF__PlantRecon__Test
END
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS WHERE CONSTRAINT_NAME ='DF__PlantRecon__Test')
BEGIN
SELECT 'EXIST'
--drop constraint
ALTER TABLE [dbo].[PlantReconciliationOptions] drop constraint DF__PlantRecon__Test
END
IF EXISTS ( SELECT * FROM sys.columns WHERE object_id = OBJECT_ID(N'[dbo].[PlantReconciliationOptions]') AND name = 'Test')
BEGIN
--drop column
ALTER TABLE [dbo].[PlantReconciliationOptions] DROP COLUMN Test
END
ALTER TABLE PlantReconciliationOptions
ADD Test INT NOT NULL
CONSTRAINT DF__PlantRecon__Test DEFAULT 30
【问题讨论】:
-
(为什么要进行两次约束检查/删除?)
标签: sql sql-server