.sql脚本中的数据库名称

时间:2011-07-05 04:16:11

标签: sql-server ssms

我需要执行以下语句

ALTER DATABASE DatabaseName ...

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

5 个答案:

答案 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)

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

暂时不需要这个,但我相信你可以使用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()。