Sql 删除一个约束’;行不通
在Sql 删除一个约束’;行不通,sql,sql-server,Sql,Sql Server,在SQLServer2005中删除带有约束的列时,我遇到以下错误 对象“DF__PlantRecon__Test”依赖于列“Test” 该列不是任何键的一部分。但是它有一个默认值约束,并且该约束有一个预定义的名称 虽然我已经编写了删除约束的代码,但它不起作用 为什么不起作用 需要做些什么才能使它发挥作用 注意:我需要先检查约束是否存在 参考资料 代码 IF OBJECT_ID('DF__PlantRecon__Test', 'C') IS NOT NULL BEGIN SELEC
SQLServer2005
中删除带有约束的列时,我遇到以下错误
对象“DF__PlantRecon__Test”依赖于列“Test”
该列不是任何键的一部分。但是它有一个默认值
约束,并且该约束有一个预定义的名称
虽然我已经编写了删除约束的代码,但它不起作用
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
解决问题的步骤
解决问题的步骤
AF=聚合函数(CLR)
C=检查约束
D=默认值(约束或独立)
F=外键约束
PK=主键约束
P=SQL存储过程
PC=程序集(CLR)存储过程
FN=SQL标量函数
FS=程序集(CLR)标量函数
FT=程序集(CLR)表值函数
R=规则(旧式、独立)
RF=复制筛选过程
S=系统基表
SN=同义词
SQ=服务队列
TA=组件(CLR)DML触发器
TR=sqldml触发器
IF=SQL内联表值函数
TF=SQL表值函数
U=表格(用户定义)
UQ=唯一约束
V=视图
X=扩展存储过程
IT=内部表格
(此列表在上找到)试试看
在您的示例中,您正在寻找“C”检查约束,默认情况下不是。您可以将“C”改为“D”,也可以同时忽略该参数
如果您与您的命名一致(如DF_uuxxx),则删除第二个参数是可以接受的选择,以确保删除硬编码的约束名称
以下是可以传递的对象类型的列表:
AF=聚合函数(CLR)
C=检查约束
D=默认值(约束或独立)
F=外键约束
PK=主键约束
P=SQL存储过程
PC=程序集(CLR)存储过程
FN=SQL标量函数
FS=程序集(CLR)标量函数
FT=程序集(CLR)表值函数
R=规则(旧式、独立)
RF=复制筛选过程
S=系统基表
SN=同义词
SQ=服务队列
TA=组件(CLR)DML触发器
TR=sqldml触发器
IF=SQL内联表值函数
TF=SQL表值函数
U=表格(用户定义)
UQ=唯一约束
V=视图
X=扩展存储过程
IT=内部表格
(此列表在上找到)这没有帮助。我需要先检查一下它是否存在。那没用。我需要首先检查它是否存在。(为什么约束检查/删除要做两次?)(为什么约束检查/删除要做两次?)命令OBJECT\u ID('DF\u PlantRecon\u Test')将返回一个值,OBJECT\u ID('DF\u PlantRecon\u Test','C')将不会返回该值。因此,在这种情况下将删除默认约束。命令OBJECT_ID('DF_uplantrecon_utest')将返回一个值,OBJECT_ID('DF_uplantrecon_utest','C')将不会返回该值。因此,在这种情况下,将删除默认约束。
IF OBJECT_ID('DF__PlantRecon__Test') IS NOT NULL
BEGIN
SELECT 'EXIST'
ALTER TABLE [dbo].[PlantReconciliationOptions] drop constraint DF__PlantRecon__Test
END