我需要执行以下语句
ALTER DATABASE DatabaseName ...
在我的.sql脚本中。但我想让我的脚本保持中立到特定的数据库。所以我想让ALTER DATABASE在当前数据库上运行。我希望DatabaseName是可选参数,但根据文档,它不是。
答案 0 :(得分:3)
数据库名称是必需的,您甚至无法将其放在参数中。
但你可以使用'exec'代替
declare @stmt varchar(max)
set @stmt = 'alter database....'
exec (@stmt)
它不是很优雅,但我相信这是唯一的方法
答案 1 :(得分:1)
db_name()返回当前数据库,然后您可以将其填入EXEC语句
DECLARE @dbname sysname = db_name()
EXEC('ALTER DATABASE ' + @dbname + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE')
答案 2 :(得分:0)
暂时不需要这个,但我相信你可以使用SELECT db_name()作为子查询,如下所示:
ALTER DATABASE (SELECT db_name()) ...
如果适用于您的用例,则在当前数据库上运行相关命令。
答案 3 :(得分:0)
那么,
这就是为什么几乎所有语言都出现了这么多ORMs的原因之一。为了确保您提供尽可能多的数据库独立性,我建议您使用其中一个。
答案 4 :(得分:0)
难道你不能只使用脚本语言来包装这个sql调用吗?它会更容易和更清洁。
您可以通过一系列复杂的SQL命令来完成此任务。如果您使用的是MySQL,则可以使用变量和CONCAT创建自己的SQL语句的示例如下所示:
http://blog.mclaughlinsoftware.com/2011/01/19/prepared-statement-failure/
正如文章中所说,对于ALTER语句,您必须将数据库名称CONCAT到语句变量中。然后,您可以使用其他SQL命令来获取所需的数据库名称,例如DATABASE()。