Запустите сгенерированную команду use DB в SQL Server - PullRequest
0 голосов
/ 25 марта 2011

У меня есть несколько баз данных в SQL Server.

И дизайн базы данных, такой как «Database1», «Database1_Tmp», «Database2», «Database2_Tmp», например. и в моей команде sql я хочу выполнить команду в текущей базе данных и некоторые команды в выбранной паре tmp базы данных.

Я написал SQL-запрос, как показано ниже, но он выдает ошибку

Неверный синтаксис рядом с'@db_Blobname'.

Как написать команду для изменения текущей базы данных на выполняющуюся команду

спасибо

..........
---command for DatabaseX
........................
--trying to change current DatabaseX to DatabaseX_Tmp to run command on
    DECLARE @db_Blobname VARCHAR( 255)
    SET @db_Blobname = (SELECT DB_NAME())
    SET @db_Blobname = @db_Blobname+ '_Tmp'
    PRINT @db_Blobname
    USE  @db_Blobname
    GO
............

1 Ответ

2 голосов
/ 25 марта 2011

Вы можете использовать exec или sp_executesql, чтобы делать то, что вы хотите.Но будьте осторожны: недостаточно обернуть USE внутри динамического sql.Вы должны инкапсулировать все операторы, которые вы хотите сделать в другой базе данных в этом динамическом вызове sql.Цитирование со страницы exec:

Изменения в контексте базы данных продолжаются только до конца инструкции EXECUTE.Например, после EXEC в этом примере контекст базы данных является master:

USE master EXEC ('USE pubs') SELECT * FROM авторов

Таким образом, ваш код выглядит примерно такэто, если у вас есть таблица "foo" в вашей базе данных:

DECLARE @db_Blobname VARCHAR( 255)
DECLARE @stmnt VARCHAR(8000)
SET @db_Blobname = (SELECT DB_NAME())
SET @db_Blobname = @db_Blobname+ '_Tmp'
SET @stmnt = 'USE '+@db_Blobname+'; SELECT * FROM foo' 
EXEC (@stmnt)
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...