2012-02-01 37 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)),則它使用默認值。爲了您的目的,這可能是足夠的參數化?

相關問題