删除名称以特定字符串开头的所有表

我肯定会像手稿那样把所有名字都以提供的字符串开头的表格放下来。 我确定这可以用一些动态sql和INFORMATION_SCHEMA表来执行。

如果有人有稿件,或者可以及时敲门,请发布博客文章。

如果没有 - 一个博客在我自己弄清楚之前发布解决方案,我会上传我的补救措施。

0
2019-05-13 03:43:16
资源 分享
答案: 4
SELECT 'DROP TABLE "' + TABLE_NAME + '"' 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '[prefix]%'

这肯定会创造一份手稿。

删除前包括检查表存在的条件:

SELECT 'IF OBJECT_ID(''' +TABLE_NAME + ''') IS NOT NULL BEGIN DROP TABLE [' + TABLE_NAME + '] END;' 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '[prefix]%'
0
2019-05-17 14:31:56
资源

谢谢Curt,这与我自己中途的补救措施不谋而合。

你的比我好 - 它提供了非常容易的改变。 我在选择中加入了一个联盟,也消除了一些考虑因素;)

declare @cmd varchar(4000)
declare cmds cursor for 
Select 'drop table [' + Table_Name + ']'
From    INFORMATION_SCHEMA.TABLES
Where   Table_Name like 'prefix%'
union
Select 'drop view [' + Table_Name + ']'
From    INFORMATION_SCHEMA.VIEWS
Where   Table_Name like 'prefix%'
open cmds
while 1=1
begin
    fetch cmds into @cmd
    if @@fetch_status != 0 break
    exec(@cmd)
end
close local
deallocate local

不要紧张,它不是一个制造数据源 - 这只是为了非常容易整理我的开发数据库,​​而我在尝试的时候。

0
2019-05-17 06:09:13
资源

Xenph Yan是解决方案比我的清洁得多,但下面是我的相同。

DECLARE @startStr AS Varchar (20)
SET @startStr = 'tableName'

DECLARE @startStrLen AS int
SELECT @startStrLen = LEN(@startStr)

SELECT 'DROP TABLE ' + name FROM sysobjects
WHERE type = 'U' AND LEFT(name, @startStrLen) = @startStr

只需将tableName转换为您想要查看的个性。

0
2019-05-17 05:24:51
资源

如果数据源中存在多个问题,您可能需要更改问题以包括所有者。

DECLARE @cmd varchar(4000)
DECLARE cmds CURSOR FOR
SELECT 'drop table [' + Table_Name + ']'
FROM INFORMATION_SCHEMA.TABLES
WHERE Table_Name LIKE 'prefix%'

OPEN cmds
WHILE 1 = 1
BEGIN
    FETCH cmds INTO @cmd
    IF @@fetch_status != 0 BREAK
    EXEC(@cmd)
END
CLOSE cmds;
DEALLOCATE cmds

这比使用创建手稿加运行的双动作策略更清晰。 然而,手稿生成的一个好处是,它为您提供了一个机会来评估在实际运行之前可能运行的蚊子的总体情况。

我认识到,如果我在制作数据源时可能会这么做,我肯定会尽可能地注意。

编辑 代码示例处理。

0
2019-05-17 05:22:55
资源