SQL Server, переменная (имя таблицы) в запросе?

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
abc
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 09.07.2004 (Пт) 17:31
Откуда: Kiev

SQL Server, переменная (имя таблицы) в запросе?

Сообщение abc » 05.06.2008 (Чт) 11:46

Такой вопрос: У меня есть хранимая процедура с набором запросов на добавление: INSERT INTO name_table
SELECT ...
Можно ли как-то вместо name_table использовать переменную, хранящую имя таблицы, или использовать IF ELSE END ?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.06.2008 (Чт) 12:09

Лучше использовать IF.
Но можно использовать и EXEC @sql, где в @sql хранится текст запроса.
Lasciate ogni speranza, voi ch'entrate.

abc
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 09.07.2004 (Пт) 17:31
Откуда: Kiev

Сообщение abc » 05.06.2008 (Чт) 14:26

А можно синтаксис. Дело в том что IF ... должно быть только на часть текста запроса (именно имя таблица в которую добавляем данные). Потому что дальше идет очень длинный текст SELECT ... и он не изменяется. Если его включать между IF и END то смысл теряется. Тогда уж проще написать две процедуры. Но, по сути у них разница только в том в какую таблицу писать результат выборки.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.06.2008 (Чт) 14:38

IF можно использовать для всего запроса целиком. Выбирать с его помощью только FROM нельзя.
Значит остается только вариант с динамическим SQL, собирается строка с SQL-запросом и запускается оператором EXECUTE.
Но я бы не советовал использовать этот метод, у него есть некоторые особенности. Чаще всего необходимости в таком решении задачи нет и задача просто неправильно сформулирована. Наверняка ее можно решить иначе, без динамического SQL.
Например нужный SELECT сохранить в виде представления или табличной функции, тогда INSERT получится коротким.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 118

    TopList