在 SQL Server 2005
中删除具有约束的列时,出现以下错误。
The object 'DF__PlantRecon__Test' is dependent on column 'Test'.
该列不属于任何键。但它有一个默认
约束,并且该约束有一个预定义的名称。
虽然我已经编写了首先删除约束的代码,但它不起作用。
- 为什么不起作用?
- 需要做什么才能使其发挥作用?
注意:我需要先检查约束是否存在。
引用文献
- 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
最佳答案
尝试
IF OBJECT_ID('DF__PlantRecon__Test') IS NOT NULL
BEGIN
SELECT 'EXIST'
ALTER TABLE [dbo].[PlantReconciliationOptions] drop constraint DF__PlantRecon__Test
END
在您的示例中,您正在寻找“C”检查约束,但 DEFAULT 不是。您可以将“C”更改为“D”或一起省略该参数。
如果您的命名与您的命名一致(例如 DF__xxx),那么删除第二个参数是一个可接受的选择,以确保删除硬编码约束名称。
以下是您可以传递的 OBJECT_ID() 对象类型的列表:
AF = Aggregate function (CLR)
C = CHECK constraint
D = DEFAULT (constraint or stand-alone)
F = FOREIGN KEY constraint
PK = PRIMARY KEY constraint
P = SQL stored procedure
PC = Assembly (CLR) stored procedure
FN = SQL scalar function
FS = Assembly (CLR) scalar function
FT = Assembly (CLR) table-valued function
R = Rule (old-style, stand-alone)
RF = Replication-filter-procedure
S = System base table
SN = Synonym
SQ = Service queue
TA = Assembly (CLR) DML trigger
TR = SQL DML trigger
IF = SQL inline table-valued function
TF = SQL table-valued-function
U = Table (user-defined)
UQ = UNIQUE constraint
V = View
X = Extended stored procedure
IT = Internal table
(此列表是在 Beyond Relational: Using TSQL Function: OBJECT_ID() 上找到的)
关于sql - 删除约束不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23550777/