删除在Microsoft SQL Server的现有约束

问题描述 投票:1回答:2

我曾尝试放弃现有的约束。下面是我有:

约束的名称是: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

但是,这是正确的?

sql-server
2个回答
0
投票

您还可以查询sys.default_constraints系统视图如下包括ALTER TABLE命令的DROP约束条款

请根据你的情况下替换表名和约束名

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使用数据作为架构名称

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

0
投票

你可以简单地使用

IF (OBJECT_ID('Con_First') IS NOT NULL)
BEGIN
   ALTER TABLE Customer DROP CONSTRAINT Con_First;
END

这里Con_First是要删除的约束的名称。

© www.soinside.com 2019 - 2024. All rights reserved.