Nit*_*xDM 4 sql sql-server dynamic-sql
有没有办法从变量中选择数据库?
Declare @bob as varchar(50);
Set @bob = 'SweetDB';
GO
USE @bob
Run Code Online (Sandbox Code Playgroud)
ang*_*son 10
很不幸的是,不行.
除非您可以将批处理的其余部分作为动态SQL执行.
使用execute动态SQL执行将更改范围的情况下execute声明,但不会离开你执行范围有持久的影响execute,从声明.
换句话说,这个:
DECLARE @db VARCHAR(100)
SET @db = 'SweetDB'
EXECUTE('use ' + @db)
Run Code Online (Sandbox Code Playgroud)
不会永久设置当前数据库,但如果您更改了上面的代码,如下所示:
DECLARE @db VARCHAR(100)
SET @db = 'SweetDB'
EXECUTE('use ' + @db + ';select * from sysobjects')
select * from sysobjects
Run Code Online (Sandbox Code Playgroud)
那么这两个查询的结果将是不同的(假设你已经不在SweetDB中了),因为第一个select在内部execute执行是在SweetDB中执行,但第二个不是.