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模式?但是真的希望不要.
双方exec并execute_sql在自己的范围内运行。而且数据库的更改只会影响自己的范围。因此,您可以:
set @sql = 'use ' + quotename(@new_db_name) + '; disable trigger t1;'
exec (@sql)
Run Code Online (Sandbox Code Playgroud)
据我所知,没有办法将当前作用域的数据库上下文更改为变量数据库名称。