2012-02-01 2 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

+1

Я предполагаю, что вы видели этот вопрос http://stackoverflow.com/questions/9093478/how-to-pass-a-database-name-as-a-parameter-in-sql-server, который предлагает EXEC. Это может быть единственный способ. – Ray

+2

@ Поделитесь ссылкой с моим собственным вопросом :-P –

ответ

3

невозможно использовать имя БД из переменной.

Использование Dynamic Querying, даже если оно уродливое.

0

Во-первых, вы не можете параметризировать DDL заявления, как это. Во-вторых, GO является терминатором партии, и после этого параметры не будут доступны.

2

Вы не можете использовать имя базы данных в переменной.

У вас есть несколько вариантов:

  • Различные сценарии DML для каждой БД
  • Dynamic SQL
0

Я не помню, допускает ли MSSqlServer ту же гибкость, что и Oracle и MySQL, но в тех случаях, когда вы можете установить базу данных по умолчанию для каждого соединения. Если запросы и операторы не задают базу данных (use (dbname)), она использует значение по умолчанию. Возможно, это достаточная параметризация для ваших целей?