2012-02-01 38 views
1
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但它是一个有点难看....如何通过一个数据库名称为在SQL Server

+1

您不能在大多数DML/DDL中参数化对象引用。你确实需要EXEC/sp_executesql,并建立一些动态查询。 – MatBailie 2012-02-01 09:32:40

+1

我假设你已经看到这个问题http://stackoverflow.com/questions/9093478/how-to-pass-a-database-name-as-a-parameter-in-sql-server它建议EXEC。这可能是唯一的方法。 – Ray 2012-02-01 09:32:43

+2

@Ray你链接到我自己的问题:-P – 2012-02-01 19:49:10

回答

3

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

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

0

首先,你不能参数化DDL语句是这样的。其次,GO是批量终结符,在此之后参数将不可用。

2

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

您有几种选择:

0

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

相关问题