EXEC使用数据库

Cra*_*aig 9 sql t-sql sql-server sql-server-2008

我编写了一个生成数据库备份文件名的脚本,备份数据库,然后将其还原为具有新数据库名称的副本.该名称基于某些日期/时间数据.

然后USE,我需要在脚本中使用该数据库,然后禁用所有触发器.

但是,这不起作用:

DECLARE @Use VARCHAR(50)
SET @Use = 'USE ' + @NewDatabaseName

EXEC(@Use)
Run Code Online (Sandbox Code Playgroud)

手动运行 - 数据库没有"使用".

如何USE用变量执行语句?

我也尝试了过程sp_executesql,结果相同.数据库没有改变.

DECLARE @sqlCommand nvarchar(1000)
SET @sqlCommand = 'USE ' + @NewDatabaseName

EXECUTE sp_executesql @sqlCommand
Run Code Online (Sandbox Code Playgroud)

看起来我可能需要进入sqlcmd模式?但是真的希望不要.

And*_*mar 7

双方execexecute_sql在自己的范围内运行。而且数据库的更改只会影响自己的范围。因此,您可以:

set @sql = 'use ' + quotename(@new_db_name) + '; disable trigger t1;'
exec (@sql)
Run Code Online (Sandbox Code Playgroud)

据我所知,没有办法将当前作用域的数据库上下文更改为变量数据库名称。