创建动态SQL命令以包含“ USE DATABASE xyz”

时间:2019-02-21 18:33:30

标签: sql-server tsql dynamic-sql

我有一个扩展的存储过程,该过程对TDE加密的数据库进行备份,用新名称恢复它,解密恢复的数据库,将其设置为简单模式,然后需要缩小日志文件。

当我到达需要发出USE DATABASE xyz;的那一部分时,我已经在变量中有了临时数据库名称,因此尝试使用以下代码

DECLARE @tempDBName VARCHAR(255)
DECLARE @sqlc NVARCHAR(MAX)

SET @tempDBName = 'xyz_temp'
SET @sqlc = N'USE ' + QUOTENAME(@tempDBName) + ' ;'

EXEC @sqlc

但我收到此错误

  

名称'USE [xyz_temp];'不是有效的标识符。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

尝试:

DECLARE @tempDBName VARCHAR(255)
DECLARE @sqlc NVARCHAR(MAX)

SET @tempDBName = 'master'
SET @sqlc = N'USE ' + QUOTENAME(@tempDBName) + ' ;'

EXEC (@sqlc);

请注意@sqlc放在括号中的方式...愚蠢的T-SQL