T-SQL脚本删除架构中的一堆表和另一个架构中的其他束之间的所有关系?

Gal*_*you 3 t-sql sql-server sql-server-2005

我在一个模式(比如dbo)中有一组表(比如Account,Customer),我在另一个模式中有一些其他表(比如Order,OrderItem)(比如库存).Order表和Customer表之间存在关系.我想删除第一个模式(dbo)中的表与第二个模式(库存)中的表之间的所有关系,而不删除同一模式中的表之间的关系.

那可能吗?任何帮助赞赏.

Cad*_*oux 7

使用元数据:

SELECT  *
FROM    INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE
WHERE   CONSTRAINT_NAME IN ( SELECT CONSTRAINT_NAME
                             FROM   INFORMATION_SCHEMA.TABLE_CONSTRAINTS
                             WHERE  CONSTRAINT_TYPE = 'FOREIGN KEY' )
SELECT  *
FROM    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
WHERE   CONSTRAINT_NAME IN ( SELECT CONSTRAINT_NAME
                             FROM   INFORMATION_SCHEMA.TABLE_CONSTRAINTS
                             WHERE  CONSTRAINT_TYPE = 'FOREIGN KEY' )
SELECT  *
FROM    INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE   CONSTRAINT_TYPE = 'FOREIGN KEY'
Run Code Online (Sandbox Code Playgroud)

添加过滤条件以查找要DROP的约束,然后将它们插入模板中:

ALTER TABLE {TABLE_SCHEMA}.{TABLE_NAME} DROP {CONSTRAINT_NAME}
Run Code Online (Sandbox Code Playgroud)

并使用动态SQL执行.


Die*_*ego 6

请通过将以下脚本复制并粘贴到 SQL Studio 来使用它:

SELECT  'ALTER TABLE ' + TABLE_SCHEMA + '.[' + TABLE_NAME + '] DROP [' + CONSTRAINT_NAME + ']'
FROM    INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE   CONSTRAINT_TYPE = 'FOREIGN KEY'
Run Code Online (Sandbox Code Playgroud)


mas*_*ani 5

您可以通过以下脚本获取数据库中存在的可用FK,然后将其删除:

select * from sys.objects o
join sys.schemas s on o.schema_id = s.schema_id
where o.type = 'F'
Run Code Online (Sandbox Code Playgroud)

之后删除如下

ALTER TABLE {TABLE_SCHEMA}.{TABLE_NAME} DROP {CONSTRAINT_NAME}
Run Code Online (Sandbox Code Playgroud)