Sql use命令的动态使用

Sql use命令的动态使用,sql,tsql,Sql,Tsql,在TSQL中,我经常使用use(请原谅我的文字游戏): 将choosenOne数据库设置为活动数据库。 现在假设如下: DECLARE @NewDB varchar(255) SET @NewDB = 'choosenOne' 我希望通过DINAMICALL编写一个有效的use命令,但我运气不佳,因为这些代码不起作用: use @NewDB -- Incorrect syntax near '@NewDB'. EXEC('use '+@NewDB) -- No runtim

在TSQL中,我经常使用
use
(请原谅我的文字游戏):

choosenOne
数据库设置为活动数据库。 现在假设如下:

DECLARE @NewDB varchar(255) 
SET @NewDB = 'choosenOne'
我希望通过DINAMICALL编写一个有效的use命令,但我运气不佳,因为这些代码不起作用:

use @NewDB          -- Incorrect syntax near '@NewDB'.
EXEC('use '+@NewDB) -- No runtime error but no change of db is performed

正确的方法是什么?

您应该在
'use'+@NewDB
之后将查询放入
EXEC
命令中:

DECLARE @NewDB varchar(255) 
SET @NewDB = 'choosenOne'
EXEC('use '+@NewDB + '
 ...............')

我在寻找一个更优雅的解决方案。实际查询中引用过多,在这种情况下,解决方案非常容易出错且不可读。实际执行了数据库更改。它只对子作用域有效,并且在作用域退出时被更改回来。这篇文章提供了这个问题的详细解决方案:除了J Tolley链接到的问题中的解决方案之外,它正是针对这个场景的。
DECLARE @NewDB varchar(255) 
SET @NewDB = 'choosenOne'
EXEC('use '+@NewDB + '
 ...............')