оператор "USE @dbname" не работает, почему? Как это сделать? - PullRequest
4 голосов
/ 02 февраля 2010

У меня есть этот фрагмент t-sql:

DECLARE @db_name varchar(255);
SET @db_name = 'MY_DATABASE'; -- assuming there is database called 'my_database'
USE @db_name -- this line ends with error "Incorrect syntax near '@db'."

Но USE с переменной (третья строка фрагмента) не работает. Почему это не работает?

Ответы [ 4 ]

8 голосов
/ 02 февраля 2010

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

4 голосов
/ 02 февраля 2010

Как вы заметили, оператор USE не принимает переменную в качестве параметра.Единственная альтернатива, которая быстро приходит на ум, является довольно грубой и чрезвычайно подверженной ошибкам, но здесь вы идете:

EXEC ('USE ' + @db_name + '
       SELECT * FROM some_table
       INSERT INTO some_table VALUES (1)')

Я надеюсь, что кто-то еще может сделать лучше: -)

3 голосов
/ 02 февраля 2010

SQL Server не будет принимать оператор USE с переменной.

Чтобы динамически использовать имена баз данных, необходимо создать динамические операторы SQL с (почти) полностью определенными именами следующим образом:

Declare @SQL VarChar (100)

SET @SQL = 'SELECT * FROM ' + @DatabaseName + '.dbo.TableName'

и затем вы выполняете его, используя sp_SQLExec

1 голос
/ 05 февраля 2013

Я делаю это с помощью оператора if:

if @DBName = 'DB1'
    <query with DB1>
else
    <query with DB2>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...