我编写了一个生成数据库备份文件名的脚本,备份数据库,然后将其还原为具有新数据库名称的副本。该名称基于一些日期/时间数据。
然后我需要在脚本中USE
该数据库,然后禁用所有触发器。
但是,这不起作用:
DECLARE @Use VARCHAR(50)
SET @Use = 'USE ' + @NewDatabaseName
EXEC(@Use)
手动运行 - 数据库无法使用'
如何使用变量执行USE
语句?
我也尝试了sp_executesql
过程,结果相同。数据库没有变化。
DECLARE @sqlCommand nvarchar(1000)
SET @sqlCommand = 'USE ' + @NewDatabaseName
EXECUTE sp_executesql @sqlCommand
看起来我可能需要进入sqlcmd模式?但是真的希望不要。
答案 0 :(得分:4)
exec
和execute_sql
都在自己的范围内运行。而数据库的变化只会影响自己的范围。所以你可以:
set @sql = 'use ' + quotename(@new_db_name) + '; disable trigger t1;'
exec (@sql)
据我所知,没有办法将当前作用域的数据库上下文更改为变量数据库名称。