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

时间:2009-06-01 23:16:45

标签: sql sql-server dynamic-sql

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

Declare @bob as varchar(50);
Set @bob = 'SweetDB';
GO
USE @bob

3 个答案:

答案 0 :(得分:9)

不幸的是,没有。

除非您可以将其余批处理作为动态SQL执行。

使用execute动态执行SQL将更改execute语句范围的上下文,但不会对执行execute语句的范围产生持久影响。

换句话说,这个:

DECLARE @db VARCHAR(100)
SET @db = 'SweetDB'
EXECUTE('use ' + @db)

不会永久设置当前数据库,但是如果您更改了上面的代码:

DECLARE @db VARCHAR(100)
SET @db = 'SweetDB'
EXECUTE('use ' + @db + ';select * from sysobjects')
select * from sysobjects

然后这两个查询的结果会有所不同(假设你已经不在SweetDB中了),因为在execute内执行的第一个select在SweetDB中执行,但第二个不是。

答案 1 :(得分:0)

declare @NewDB varchar(50)
set @NewDB = 'NewDB'
execute('use ' + @NewDB)

答案 2 :(得分:0)

#TempTables将坚持GOs

您可以在第一批中创建表,根据需要在该批次或任何后续批次中插入/选择数据。

这里有一些示例语法:

CREATE TABLE #YourTableName
(
     col1   int         not null   primary key   identity(1,1)
    ,col2   varchar(10)
)