Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 删除一个约束’;行不通_Sql_Sql Server - Fatal编程技术网

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
    

    解决问题的步骤

  • 打开SSMS
  • 编辑表格以删除默认值不按保存
  • 将输出脚本设置为“新窗口”
  • 读剧本

  • 解决问题的步骤

  • 打开SSMS
  • 编辑表格以删除默认值不按保存
  • 将输出脚本设置为“新窗口”
  • 读剧本
  • 试一试

    在您的示例中,您正在寻找“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=内部表格
    
    (此列表在上找到)

    试试看

    在您的示例中,您正在寻找“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