2
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

4 回答 4

5

从变量中使用数据库名称是不可能的。

使用动态查询,即使它很丑陋。

于 2012-02-01T09:54:24.400 回答
2

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

你有几个选择:

于 2012-02-01T09:32:23.700 回答
0

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

于 2012-02-01T09:31:45.840 回答
0

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

于 2012-02-01T09:55:31.547 回答