删除不知道名称的约束

时间:2016-09-07 06:48:33

标签: sql sql-server constraints sql-scripts

我的问题。 我有一个数据库,它是一个很大的,我想删除表之间的特定约束,我想用Visual Studio编写的迁移脚本。我将它用于在我的电脑上本地运行的开发目的,但它也在登台服务器上运行。 我可以在本地使用约束的名称,它可以工作,但在登台服务器上名称是不同的。所以这就是为什么我不想知道它的名字。

我一直在阅读有关同一问题的stackoverflow上的很多帖子,但它们都不适用于我。

在构建大型数据库之前,我已经构建了一个小型数据库来尝试使用不同的代码。

看起来像这样:

The small DB

我试过这个:

SELECT * 
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('Genres')

SELECT 
    'ALTER TABLE ' +  OBJECT_SCHEMA_NAME(parent_object_id) +
    '.[' + OBJECT_NAME(parent_object_id) + 
    '] DROP FOREIGN_KEY_CONSTRAINT ' + name
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('Genres')

这个

DECLARE @SQL NVARCHAR(MAX) = N'';

SELECT @SQL += N'
ALTER TABLE ' + OBJECT_NAME(PARENT_OBJECT_ID) + ' DROP CONSTRAINT ' + OBJECT_NAME(OBJECT_ID) + ';' 
FROM SYS.OBJECTS
WHERE TYPE_DESC LIKE '%CONSTRAINT' AND OBJECT_NAME(PARENT_OBJECT_ID) = 'Albums';

EXECUTE @SQL

在这两种情况下,它都会发现约束会尝试删除它,但仍然存在。 它甚至会打印出我想删除的约束的名称。

enter image description here

0 个答案:

没有答案