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

发布于 2024-07-22 07:00:58 字数 111 浏览 6 评论 0原文

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

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

Is there a way to select a database from a variable?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

淡紫姑娘! 2024-07-29 07:00:58

很不幸的是,不行。

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

使用 execute 动态执行 SQL 将更改 execute 语句范围的上下文,但不会对执行 execute< 的范围留下持久影响/code> 声明来自.

换句话说,这:

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

Unfortunately, no.

Unless you can execute the rest of your batch as dynamic SQL.

Using execute to dynamically execute SQL will change the context for the scope of the execute statement, but will not leave a lasting effect on the scope you execute the execute statement from.

In other words, this:

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

Will not set the current database permanently, but if you altered the above code like this:

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

Then the result of those two queries will be different (assuming you're not in SweetDB already), since the first select, executed inside execute is executing in SweetDB, but the second isn't.

蓦然回首 2024-07-29 07:00:58
declare @NewDB varchar(50)
set @NewDB = 'NewDB'
execute('use ' + @NewDB)
declare @NewDB varchar(50)
set @NewDB = 'NewDB'
execute('use ' + @NewDB)
我不是你的备胎 2024-07-29 07:00:58

#TempTables 将跨 GO 保留

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

这是一些示例语法:

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

#TempTables will presist across GOs

you can create the table in the first batch, insert/select data as necessary in that or any following batch.

here is some sample syntax:

CREATE TABLE #YourTableName
(
     col1   int         not null   primary key   identity(1,1)
    ,col2   varchar(10)
)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文