SQL Server:drop table cascade等效?

Sin*_*tic 25 sql sql-server cascade database-table sql-drop

在oracle中,要删除所有表和约束,您可以键入类似的内容

DROP TABLE myTable CASCADE CONSTRAINTS PURGE;
Run Code Online (Sandbox Code Playgroud)

这将完全删除表及其依赖项.什么是SQL服务器等价?

mis*_*ghi 34

在SQL Server Management Studio中,转到"选项/ SQL Server对象资源管理器/脚本",然后启用"为从属对象生成脚本".然后右键单击表格,脚本>拖放到>新查询窗口,它将为您生成它.

  • 对于OP来说不是很好的解决方案,现在我了解了为什么默认情况下禁用它。不知何故,所有表都“依赖”`ContactInfo`表...呃... (2认同)

Vin*_*nie 23

我不相信SQL有一个同样优雅的解决方案.在删除表之前,必须先删除任何相关约束.

幸运的是,这些都存储在信息模式中,您可以访问它以获取您的重击列表.

这篇博客文章应该能够满足您的需求:http: //weblogs.asp.net/jgalloway/archive/2006/04/12/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
Run Code Online (Sandbox Code Playgroud)


TJR*_*TJR 7

这可能是一个可怕的解决方案,但我发现它很快.它与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>'
)
Run Code Online (Sandbox Code Playgroud)