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

时间:2012-02-01 09:29:44

标签: sql sql-server dml

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,但它有点难看......

4 个答案:

答案 0 :(得分:3)

不可能从变量中使用DB名称。

使用动态查询,即使它很难看。

答案 1 :(得分:2)

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

您有几种选择:

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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