【发布时间】:2011-06-19 00:18:17
【问题描述】:
在 oracle 中,要删除所有表和约束,您可以键入类似的内容
DROP TABLE myTable CASCADE CONSTRAINTS PURGE;
这将完全删除表及其依赖项。什么是 SQL 服务器等价物??
【问题讨论】:
标签: sql sql-server cascade database-table sql-drop
在 oracle 中,要删除所有表和约束,您可以键入类似的内容
DROP TABLE myTable CASCADE CONSTRAINTS PURGE;
这将完全删除表及其依赖项。什么是 SQL 服务器等价物??
【问题讨论】:
标签: sql sql-server cascade database-table sql-drop
我只需要删除外键
DECLARE @database nvarchar(50)
DECLARE @TABLE_NAME nvarchar(250)
DECLARE @CONSTRAINT_NAME nvarchar(250)
DECLARE @sql nvarchar(350)
set @database = 'XXX'
DECLARE db_cursor CURSOR FOR
select TABLE_NAME, CONSTRAINT_NAME from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_catalog = @database and CONSTRAINT_TYPE='FOREIGN KEY'
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @TABLE_NAME, @CONSTRAINT_NAME
WHILE @@FETCH_STATUS = 0
BEGIN
select @sql = 'ALTER TABLE ' + @TABLE_NAME + ' DROP CONSTRAINT ' + @CONSTRAINT_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where constraint_catalog = @database and
table_name = @TABLE_NAME
exec sp_executesql @sql
FETCH NEXT FROM db_cursor INTO @TABLE_NAME, @CONSTRAINT_NAME
END
CLOSE db_cursor
DEALLOCATE db_cursor
【讨论】:
在某些表格引用您的表格之前,这一切都很有趣和游戏......
然后我必须像这样更改提供的代码:
CREATE PROCEDURE _cascadeConstraints @database nvarchar(30) = NULL, @table nvarchar(60) = NULL
as
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
select @sql = 'ALTER TABLE ' + tc.TABLE_NAME + ' DROP CONSTRAINT ' + tc.CONSTRAINT_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc join
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc on
(rc.CONSTRAINT_CATALOG = tc.CONSTRAINT_CATALOG and
rc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME) join
INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc_pk on
(tc_pk.CONSTRAINT_CATALOG = rc.CONSTRAINT_CATALOG and
tc_pk.CONSTRAINT_NAME = rc.UNIQUE_CONSTRAINT_NAME)
where tc.constraint_catalog = @database
and tc_pk.TABLE_NAME = @table
exec sp_executesql @sql
END
go
【讨论】:
最终我们要删除我们的表格。 所以我们可以简单地运行以下 2 个命令:
改变表...删除约束...
删除表 ...
1> ALTER TABLE PRJ_DETAILS DROP CONSTRAINT FK_PRJ_TYPE;
-- 表名和约束名是参数
2> 删除表。
第一个删除约束,其名称与表相关联 其次,您可以删除表格。
它对我有用,也很容易。
【讨论】:
在 SQL Server Management Studio 中,转到选项/SQL Server 对象资源管理器/脚本,并启用“为依赖对象生成脚本”。然后右键单击表格,脚本 > 拖放到 > 新查询窗口,它将为您生成它。
【讨论】:
ContactInfo 表......呃......
这可能是一个糟糕的解决方案,但我发现它很快。和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>'
)
【讨论】:
and t.table_name = 'mytable'吗?
我不相信 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
【讨论】: