如何使用T-SQL在整个数据库中删除表

在某些情况下,我们需要在数据库范围内删除所有表。例如,当我们有一个测试数据库时,我们需要从数据库中删除所有表并重新创建其他表进行测试,我们需要使用GUI手动删除每个表。假定数据库中有50个表,因此,我们需要一张一张地删除这些表并重复该过程50次。实际上,当表之间存在某些关系时,它会变得越来越困难!

那么,我们现在该怎么办?好的,我们需要先删除所有依赖项,然后删除所有50个表!令人沮丧,不是吗?

为什么我们不应该使用T-SQL以编程方式做到这一点?将以下代码复制并粘贴到SSMS(SQL Server Management Studio)中,然后轻松按F5键。全做完了。简单!

宣布 @FK (没有 整型, tbl nvarchar(最高), k nvarchar(最高))

宣布 @计数器 整型

宣布 @sql nvarchar(最高)

宣布 @表 nvarchar(最高)

宣布 @约束 nvarchar(最高)

插入 进入 @FK (没有, tbl , k)

选择 ROW_NUMBER() 过度 (订购 通过 f.名称),t.名称, f.名称 系统.外键 f 加入 系统.桌子 t f.parent_object_id=t.object_id

@计数器= (选择 计数(*) @FK)

@计数器 >0

开始

@表 = (选择 tbl @FK 哪里 没有=@计数器)

@约束 = (选择 k @FK 哪里 没有=@计数器)

@sql = ‘ALTER TABLE [dbo].[‘+@表+‘]  下降  约束[‘+@约束+‘]’

执行 SP_EXECUTESQL @sql

@计数器=@计数器1

结束

删除 @FK

插入 进入 @FK (没有, tbl, k)

选择 ROW_NUMBER() 过度 (订购 通过 t.名称),t.名称, 不适用=空 系统.桌子 t

@计数器= (选择 计数(*) @FK)

@计数器 >0

开始

@表 = (选择 tbl @FK 哪里 没有=@计数器)

@sql = ‘DROP TABLE [dbo].[‘+@表+‘]’

执行 SP_EXECUTESQL @sql

@计数器=@计数器1

结束;

有什么想法吗?在这里与我们分享:

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.