Как передать имя базы данных в качестве параметра в SQL Server - PullRequest
1 голос
/ 01 февраля 2012
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 ]

3 голосов
/ 01 февраля 2012

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

Используйте динамические запросы, даже если они ужасны.

2 голосов
/ 01 февраля 2012

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

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

0 голосов
/ 01 февраля 2012

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

0 голосов
/ 01 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...