【问题标题】:Delete all tables with a certain prefix name in a SQL 2008 database programmatically以编程方式删除 SQL 2008 数据库中具有特定前缀名称的所有表
【发布时间】:2011-07-04 08:23:52
【问题描述】:

我的 SQL 2008 数据库中有 3000 多个表,其名称如下所示,均以 tempBinary_ 开头,我需要以编程方式删除它们,我该怎么做? 我不知道我是否更喜欢 SQL 脚本中的解决方案或使用 LINQtoSQL,我想两者都很好。

tempBinary_002c90322f4e492795a0b8a14e2f7c99 tempBinary_0039f7db05a9456f96eb3cd6a788225a tempBinary_0057da9ef0d84017b3d0bbcbfb934fb2

我以前在列上使用过 Like,但我不知道它是否也适用于表名。 也许像这样,在使用 LIKE 的地方,可以做到吗?我不知道。

Use [dbo].[database_name]
DROP TABLE table_name
WHERE table_name LIKE 'tempBinary_%'

有什么想法吗?

【问题讨论】:

标签: sql tablename


【解决方案1】:
declare @stmt varchar(max) = ''
declare @tbl_name varchar(255)


DECLARE tbl_cursor CURSOR  FORWARD_ONLY READ_ONLY
    FOR select name 
        from sysobjects 
        where xtype='u' and name like 'tempBinary%'
OPEN tbl_cursor
FETCH NEXT FROM tbl_cursor
INTO @tbl_name;

WHILE @@FETCH_STATUS = 0
BEGIN
    set @stmt = @stmt + 'drop table ' + @tbl_name + ';' +  CHAR(13)


    FETCH NEXT FROM tbl_cursor 
    INTO @tbl_name
end
CLOSE tbl_cursor;
DEALLOCATE tbl_cursor;    

execute sp_sqlexec @stmt

【讨论】:

  • 如果您在执行 sp_sqlexec 之前放置一个 print @stmt,您将逐行看到 drop 语句
  • 好的,谢谢。稍等,我会对其进行测试,并尽快回复您。
  • 我做了一个测试,这个脚本有点慢,唯一的改进是声明游标FORWARD_ONLY READ_ONLY,我会编辑
猜你喜欢
  • 2020-06-10
  • 2013-08-19
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多