我的问题。 我有一个数据库,它是一个很大的,我想删除表之间的特定约束,我想用Visual Studio编写的迁移脚本。我将它用于在我的电脑上本地运行的开发目的,但它也在登台服务器上运行。 我可以在本地使用约束的名称,它可以工作,但在登台服务器上名称是不同的。所以这就是为什么我不想知道它的名字。
我一直在阅读有关同一问题的stackoverflow上的很多帖子,但它们都不适用于我。
在构建大型数据库之前,我已经构建了一个小型数据库来尝试使用不同的代码。
看起来像这样:
我试过这个:
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
在这两种情况下,它都会发现约束会尝试删除它,但仍然存在。 它甚至会打印出我想删除的约束的名称。