有没有办法从变量中选择数据库?

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中执行,但第二个不是.