4

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

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

3 回答 3

10

很不幸的是,不行。

除非您可以将批处理的其余部分作为动态 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执行的第一个选择是在 SweetDB 中执行的,但第二个不是。

于 2009-06-01T23:36:24.030 回答
0
declare @NewDB varchar(50)
set @NewDB = 'NewDB'
execute('use ' + @NewDB)
于 2009-06-01T23:23:53.260 回答
0

#TempTables 将存在于 GO 中

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

这是一些示例语法:

CREATE TABLE #YourTableName
(
     col1   int         not null   primary key   identity(1,1)
    ,col2   varchar(10)
)
于 2009-06-02T13:02:15.750 回答