我有一个sql查询我已经使用了很长时间来删除在运行模拟文件时创建的数据库。我使用此查询以防出现问题并且数据库未被删除然后返回错误数据。但是,我最近决定从上次运行此文件时至少保留以前的数据库所以我想我只是在查询中添加一个部分来改变数据库的名称,这样我的drop查询就不会触摸它。
这是我用来删除数据库的查询。 (多个是这个问题最重要的部分)
--declare variables
DECLARE @dbname nvarchar(200); --database name from reports
DECLARE @query1 nvarchar(max); --query to drop databases
DECLARE @query2 nvarhcar(max); --query to fore drop databases if query1 fails
--declare the cursor by selecting database names with the TESTTAG tag.
DECLARE db_cursor CURSOR FOR
SELECT name FROM sys.databases
WHERE name LIKE '%TESTTAG%'
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @dbname
WHILE @@FETCH_STATUS = 0 --keep going as long as there is more in the list of db names
BEGIN
--drop the databases
SET @query1 = 'DROP DATABASE ['+ @dbname +']'
SET @query2 = 'USE master
ALTER DATABASE ['+ @dbname +']
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE ['+ @dbname +'];'
EXEC(@query1)
EXEC(@query2)
FETCH NEXT FROM db_cursor INTO @dbname
END
CLOSE db_cursor
DEALLOCATE db_cursor
我想我会使用相同的基本结构来创建我的“重命名数据库”查询。但是将@query
变量的内容替换为alter database
查询。
我发现这个例子用作一个好的查询格式来改变名称。
USE master
GO
ALTER DATABASE Database1
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE
GO
EXEC master..sp_renamedb 'Database1','Database2'
GO
ALTER DATABASE Database2
SET MULTI_USER
GO
然而,我意识到了一个问题。我计划更改报告名称的方法是简单地更改每个数据库名称中的标记。因此,我可能会使用“EXPTEXT”代替“TESTTAG”。但是“TESTTAG”位于@dbname
变量的内部。