如何在SQL Server中将数据库名称作为参数传递

3
USE master
GO

DECLARE @DbName nvarchar(MAX)
SET @DbName = N'DataBase'

ALTER DATABASE @DbName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE

ALTER DATABASE @DbName SET OFFLINE WITH NO_WAIT
GO

ALTER DATABASE @DbName SET ONLINE
GO

ALTER DATABASE @DbName
SET MULTI_USER
GO

我知道可以使用EXEC,但这有点丑陋...

1
大多数DML / DDL中无法参数化对象引用。实际上,您确实需要使用EXEC / sp_executesql,并构建一些动态查询。 - MatBailie
1
我想你已经看到了这个问题:https://dev59.com/3mvds4cB2Jgan1znTfGV,其中建议使用EXEC。那可能是唯一的方法。 - Ray
2
@Ray,你链接到了我的问题本身 :-P - AK_
@AK_ 哈!我错了。复制和粘贴出了问题。不再有我想链接的内容了。 - Ray
这个回答解决了你的问题吗?如何实现类似于:USE @databaseName - Wai Ha Lee
4个回答

6

无法使用变量作为数据库名称。

即使不够美观,也请使用动态查询。


2

您不能在变量中使用数据库名称。

您有几个选项:

  • 为每个数据库编写不同的DML脚本
  • 动态SQL

0

首先,你不能像这样对DDL语句进行参数化。其次,GO是批处理终止符,在此之后参数将不可用。


0

我不记得MSSqlServer是否允许与Oracle和MySQL相同的灵活性,但在这些数据库中,您可以为每个连接设置默认数据库。如果查询和语句没有指定数据库(use (dbname)),则使用默认数据库。也许这对于您的目的来说已经足够参数化了?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接