.sql 脚本中的数据库名称
我需要
ALTER DATABASE DatabaseName ...
在 .sql 脚本中执行以下语句。但我想让我的脚本对特定数据库保持中立。所以我想让 ALTER DATABASE 在当前数据库上工作。我希望 DatabaseName 是可选参数,但根据文档,它不是。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
数据库名称是必需的,您甚至不能将其放入参数中。
但你可以使用“exec”代替
它不是很优雅,但我相信这是唯一的方法
Database name is required and you cannot even put it in a parameter.
But you can use 'exec' instead
It is not very elegant, but i believe it is the only way to do it
db_name() 返回当前数据库,然后您可以将其填充到EXEC 语句
db_name() returns the current database, which you can then stuff into an EXEC statement
好吧,
这就是为什么几乎所有可能的语言都会出现如此多的 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.
不能直接使用脚本语言来包装这个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().
编辑:我撤回我的答案,在这种情况下使用 EXEC 的答案是正确的想法。
一段时间不需要这个,但我相信您可以使用 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:
To run the relevant command on the current database, if that works for your use case.