.sql 脚本中的数据库名称

发布于 2024-11-18 14:26:28 字数 177 浏览 4 评论 0 原文

我需要

ALTER DATABASE DatabaseName ...

在 .sql 脚本中执行以下语句。但我想让我的脚本对特定数据库保持中立。所以我想让 ALTER DATABASE 在当前数据库上工作。我希望 DatabaseName 是可选参数,但根据文档,它不是。

I need to execute the following statement

ALTER DATABASE DatabaseName ...

in my .sql script. But I want to keep my script neutral to the specific database. So I want to make ALTER DATABASE work on the current database. I hoped DatabaseName is optional parameter, but according to documentation, it is not.

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

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

发布评论

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

评论(5

心欲静而疯不止 2024-11-25 14:26:28

数据库名称是必需的,您甚至不能将其放入参数中。

但你可以使用“exec”代替

    declare @stmt varchar(max)
    set @stmt = 'alter database....'
    exec (@stmt)

它不是很优雅,但我相信这是唯一的方法

Database name is required and you cannot even put it in a parameter.

But you can use 'exec' instead

    declare @stmt varchar(max)
    set @stmt = 'alter database....'
    exec (@stmt)

It is not very elegant, but i believe it is the only way to do it

厌味 2024-11-25 14:26:28

db_name() 返回当前数据库,然后您可以将其填充到EXEC 语句

DECLARE @dbname sysname = db_name()

EXEC('ALTER DATABASE ' + @dbname + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE') 

db_name() returns the current database, which you can then stuff into an EXEC statement

DECLARE @dbname sysname = db_name()

EXEC('ALTER DATABASE ' + @dbname + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE') 
吐个泡泡 2024-11-25 14:26:28

好吧,

这就是为什么几乎所有可能的语言都会出现如此多的 ORM 的原因之一。为了确保您提供尽可能多的数据库独立性,我建议您使用其中之一。

Well,

This is one of the reasons why so many ORMs appeared for almost all the languages possible. To be sure you offer as much DB independence as possible, I recommend you to use one of them.

一百个冬季 2024-11-25 14:26:28

不能直接使用脚本语言来包装这个sql调用吗?这会更容易和更干净。

您可以通过一系列复杂的 SQL 命令来完成此操作。如果您使用的是 MySQL,则此处显示了使用变量和 CONCAT 创建自己的 SQL 语句的示例:

http://blog.mclaughlinsoftware.com/2011/01/19/prepared-statement-failure/

正如文章中所说,对于 ALTER 语句,您必须将数据库名称 CONCAT 到语句变量中。然后,您可以使用其他 SQL 命令来获取所需的数据库名称,例如 DATABASE()。

Can't you just use a scripting language to wrap this sql call? It would be much easier and cleaner.

You can accomplish this through a series of convoluted SQL commands. If you're using MySQL, an example of creating your own SQL statement using variables and CONCAT is shown here:

http://blog.mclaughlinsoftware.com/2011/01/19/prepared-statement-failure/

As it says in the article, for ALTER statements, you have to CONCAT the database name into the statement variable. You can then use other SQL commands to get the database name you want, like DATABASE().

对不⑦ 2024-11-25 14:26:28

编辑:我撤回我的答案,在这种情况下使用 EXEC 的答案是正确的想法。

一段时间不需要这个,但我相信您可以使用 SELECT db_name() 作为子查询,如下所示:

ALTER DATABASE (SELECT db_name()) ...

在当前数据库上运行相关命令(如果这适用于您的用例)。

EDIT: I retract my answer, the answers using EXEC are the right idea in this case.

Haven't need this in a while, but I believe you can use SELECT db_name() as a subquery, like so:

ALTER DATABASE (SELECT db_name()) ...

To run the relevant command on the current database, if that works for your use case.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文