删除Microsoft SQL Server中的现有约束

时间:2019-02-04 10:53:24

标签: sql-server

我尝试删除现有约束。这是我所拥有的:

约束的名称为:Data.Leraar.IsGeheim.DefaultValue 该表的名称为:Data.Leraa

这是我当前正在使用的命令:

IF EXISTS(SELECT 1 FROM sys.foreign_keys WHERE parent_object_id = OBJECT_ID(N'dbo.Leraar'))
 BEGIN 
ALTER TABLE Data.Leraar DROP CONSTRAINT [Data.Leraar.IsGeheim.DefaultValue]
END 

如果执行此命令,它将显示Command(s) completed successfully. 但是约束仍然存在。

我应该如何更改此命令?

所以你的意思是这样的:

IF EXISTS(SELECT 1 FROM sys.foreign_keys WHERE parent_object_id = OBJECT_ID(N'dbo.Leraar'))
 BEGIN 

ALTER TABLE DataData.Leraar DROP FOREIGN KEY IsGeheim.DefaultValue;
END 

但是那样我会得到一个错误

对不起,但是我正在使用Microsoft SQL

如果我只是做一个简单的话:

    ALTER TABLE [Data].[Leraar] DROP CONSTRAINT [Data.Leraar.IsGeheim.DefaultValue]
    GO

it works. But I first want to check if it exists

If I do it like this:

IF exists (
    SELECT * 
    FROM sys.default_constraints 
    WHERE 
        parent_object_id = OBJECT_ID(N'Data.Leraar') and
        name  = 'Data.Leraar.IsGeheim.DefaultValue'
)
    ALTER TABLE Data.Leraar Drop Constraint Data.Leraar.IsGeheim.DefaultValue
GO

我在这行上出错

 ALTER TABLE Data.Leraar Drop Constraint Data.Leraar.IsGeheim.DefaultValue

在数据之后。我收到错误消息:

  

信息102,级别15,状态1,第15行,'。'附近的语法不正确。

这有效:

IF NOT EXISTS(SELECT 1 FROM sys.foreign_keys WHERE parent_object_id = OBJECT_ID(N'dbo.Leraar'))
BEGIN
ALTER TABLE [Data].[Leraar] ADD  CONSTRAINT [Data.Leraar.IsGeheim.DefaultValue]  DEFAULT ((1)) FOR [IsGeheim]
END

但是如果存在的话就放弃吧

我现在这样子:

IF EXISTS (
    SELECT * 
    FROM sys.default_constraints 
    WHERE 
        parent_object_id = OBJECT_ID(N'Data.Leraar') and
        name  = 'Data.Leraar.IsGeheim.DefaultValue'
)
    ALTER TABLE Data.Leraar Drop Constraint [Data.Leraar.IsGeheim.DefaultValue]
    PRINT 'constraint [Data.Leraar.IsGeheim.DefaultValue] has been dropped'
GO

IF NOT EXISTS((SELECT 1 FROM sys.foreign_keys WHERE parent_object_id = OBJECT_ID(N'dbo.Leraar') AND name ='Data.Leraar.IsGeheim.DefaultValue'))
BEGIN
ALTER TABLE [Data].[Leraar] ADD  CONSTRAINT [Data.Leraar.IsGeheim.DefaultValue]  DEFAULT ((1)) FOR [IsGeheim]
PRINT 'Constraint has been created [Data.Leraar.IsGeheim.DefaultValue]'
END

但这是正确的吗?

2 个答案:

答案 0 :(得分:0)

您可以简单地使用

Con_First

vue-chartJs是您要删除的约束的名称。

答案 1 :(得分:0)

您还可以如下查询sys.default_constraints系统视图,包括ALTER TABLE命令的DROP Constraint子句

请根据您的情况替换表名称和约束名称

IF exists (
    SELECT * 
    FROM sys.default_constraints 
    WHERE 
        parent_object_id = OBJECT_ID(N'Table_1') and
        name  = 'DF_Table_1_col1'
)
    ALTER TABLE Table_1 Drop Constraint DF_Table_1_col1
GO

我更新上述命令如下,因为据我了解存在误解

我现在假设表Leraar的模式是Data 因此,请不要使用dbo,而要使用Data作为模式名称

IF exists (
    SELECT * 
    FROM sys.default_constraints 
    WHERE 
        parent_object_id = OBJECT_ID(N'Data.Leraar') and
        name  = 'Data.Leraar.IsGeheim.DefaultValue'
)
    ALTER TABLE Data.Leraar Drop Constraint [Data.Leraar.IsGeheim.DefaultValue]
GO