SQL Server:Drop Table Cascade等效?[英] SQL Server: drop table cascade equivalent?

本文是小编为大家收集整理的关于SQL Server:Drop Table Cascade等效?的处理方法,想解了SQL Server:Drop Table Cascade等效?的问题怎么解决?SQL Server:Drop Table Cascade等效?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

在Oracle中,要丢弃所有表和约束,您将输入

之类的内容
DROP TABLE myTable CASCADE CONSTRAINTS PURGE;

这将完全删除表及其依赖性.什么是SQL Server等效?

推荐答案

我不相信SQL具有类似的优雅解决方案.您必须先删除任何相关的约束,然后才能删除表.

幸运的是,所有这些都存储在信息架构中,您可以访问它以获取您的wark列表.

本博客文章应该能够为您提供所需的内容: 442616.aspx

-- t-sql scriptlet to drop all constraints on a table
DECLARE @database nvarchar(50)
DECLARE @table nvarchar(50)

set @database = 'DatabaseName'
set @table = 'TableName'

DECLARE @sql nvarchar(255)
WHILE EXISTS(select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_catalog = @database and table_name = @table)
BEGIN
    select    @sql = 'ALTER TABLE ' + @table + ' DROP CONSTRAINT ' + CONSTRAINT_NAME 
    from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
    where    constraint_catalog = @database and 
            table_name = @table
    exec    sp_executesql @sql
END

其他推荐答案

在SQL Server Management Studio中,转到选项/SQL Server Object Explorer/脚本,并启用"为依赖对象生成脚本".然后右键单击表格,脚本>落到>新查询窗口,它将为您生成.

其他推荐答案

这可能是一个可怕的解决方案,但我发现它很快.它类似于Vinnie的答案,但是SQL语句的产品是另一个SQL语句,它将删除所有约束和表.

(
select
  'ALTER TABLE ' + tc.table_name + ' DROP CONSTRAINT ' + tc.constraint_name + ';'
from
  INFORMATION_SCHEMA.TABLES t
  ,INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
where
  t.table_name = tc.table_name
  and tc.constraint_name not like '%_pk'
  and tc.constraint_name not like 'pk_%'
  and t.table_catalog='<schema>'
) UNION (
select
  'DROP TABLE ' + t.table_name + ';'
from
  INFORMATION_SCHEMA.TABLES t
where
  t.table_catalog='<schema>'
)

本文地址:https://www.itbaoku.cn/post/1794006.html