【问题标题】:Query that will apply to EVERY SQL Server database将应用于每个 SQL Server 数据库的查询
【发布时间】:2015-09-28 20:32:30
【问题描述】:

我正在测试所有以特定前缀开头的数据库的删除数据库查询。但是,因为这很容易导致可怕的事情,所以我正在使用我的 drop 数据库查询

declare @dbname nvarchar (200);
declare @query nvarchar (max);

DECLARE db_cursor CURSOR FOR  
select name from sys.databases 
where name like 'PREFIX%' 

Open db_cursor
fetch next from db_cursor into @dbname

while @@FETCH_STATUS = 0

BEGIN
  set @query = 'Drop Database ['+ @dbname + ']' 
  Exec(@query)

  FETCH NEXT FROM db_cursor INTO @dbname 

END
Close db_cursor
deallocate db_cursor

并希望将Drop Database 部分更改为不那么可怕的东西。

所以主要问题是否有一个简单的 SQL 查询,我可以在其中放入始终适用于任何 SQL Server 数据库的简单 SQL 查询?所以我知道这个查询只会在切换回Drop Database之前影响我想要的数据库?

编辑:更好的是,一个将返回数据库名称的查询。 与select name from sys.databases 类似,但它与['+ @dbname + '] 一起使用,仅返回带有该前缀的数据库的名称,以确保此查询影响适当的数据库。

【问题讨论】:

  • 使用数据库将适用。但我不确定它会有什么帮助
  • @lazy 查看我所做的编辑
  • 你为什么觉得这里需要使用光标?
  • 只是PRINT 而不是Exec。并且使用QUOTENAME不是自制的方括号加法。

标签: sql sql-server database drop-database


【解决方案1】:

不用Exec(@query),只需拨打PRINT @query。这将显示您打算运行的 SQL。

PRINT Documentation

【讨论】:

    【解决方案2】:

    首先只需执行以下查询,它将告诉您它将在其余代码中引入哪些数据库

    select name from sys.databases 
    where name like 'PREFIX%' 
    

    最后添加一个PRINT 语句以查看最终的DROP DATABASE 语句在游标内动态构建。

    您的代码中的一些小改进:

    declare @dbname  SYSNAME;
    declare @query nvarchar (max);
    
    DECLARE db_cursor CURSOR LOCAL FORWARD_ONLY FOR  
    select name from sys.databases 
    where name like 'PREFIX%' 
    
    Open db_cursor
    fetch next from db_cursor into @dbname
    
    while (@@FETCH_STATUS = 0)
    BEGIN
    
      set @query = 'Drop Database '+ QUOTENAME(@dbname)  
    
       --Exec sp_executesql @query       --<-- For execution
       -- PRINT @query                   --<-- For debugging
      FETCH NEXT FROM db_cursor INTO @dbname 
    
    END
    Close db_cursor
    
    deallocate db_cursor
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 2019-02-05
      相关资源
      最近更新 更多