powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Макроподстановка в Select ...
13 сообщений из 13, страница 1 из 1
Макроподстановка в Select ...
    #32004509
N_Michael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!

Сталкнулся с такой необходимостью:

- как сделать Subj, например в секции "where" команды Select, т.к. условия в одном и том же запросе меняются (и кол-во условий), а создавать 5-10 хранимых процедур, которые бы отличались только одним селектом не хочется, да и поддерживать не очень удобно ....

- возможно ли в select в секции "from" подставлять источник самостоятельно (например три таблицы data1, data2, data3 и если @Num=1, то Select по Data1, если 2 - data2 и т.д.)?

Заранее благодарен.

С уважением, Михаил.
...
Рейтинг: 0 / 0
Макроподстановка в Select ...
    #32004511
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
declare @StringSQL varchar(1000)

set @StringSQL = формируете выражение запроса

exec(@StringSQL)
...
Рейтинг: 0 / 0
Макроподстановка в Select ...
    #32004514
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- view

- inline functions
...
Рейтинг: 0 / 0
Макроподстановка в Select ...
    #32004515
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SergSuper

А можно поподробнее о способе со view, что то я не понял как его в данном случае можно использовать
...
Рейтинг: 0 / 0
Макроподстановка в Select ...
    #32004518
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Genady

Да вроде всё очевидно, я имел ввиду примерно такое:

create View SuperView as

select * from tbl1,..., tbl20
where постоянные_условия

go

select * from SuperView
where меняющиеся_условия
...
Рейтинг: 0 / 0
Макроподстановка в Select ...
    #32004522
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аааа, а то я уже подумал, что можно каким-то образом создавать View с параметрами
Теперь понятно
...
Рейтинг: 0 / 0
Макроподстановка в Select ...
    #32004529
Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если имеется стандартный набор условий для WHERE то можно сделать вот так:

CREATE PROCEDURE test
@param1 varchar(255) =NULL,
@param2 int =NULL
AS

SELECT ..
FROM ...
WHERE (fiield1 LIKE @param1 or @param1 is null)
AND (fiield2=@param2 or @param2 is null)
AND ...
...
Рейтинг: 0 / 0
Макроподстановка в Select ...
    #32004532
N_Michael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем большое спасибо за ответы.

To Genady:
Через Exec(SCommad) все должно получиться

To SergSuper:
>- inline functions
А что это за зверь? Если можно, то поподробнее плиз, в BOL ничего об этом найти не смог ...

To Victor:
Так к сожалению не получиться т.к. не какие условия, не тем более их количество не известно

С уважением, Михаил.
...
Рейтинг: 0 / 0
Макроподстановка в Select ...
    #32004533
Gennady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 N_Michael

Если у Вас не MSSQL 2000 то с inline function - обломинго они появились только в этой версии сервера.
...
Рейтинг: 0 / 0
Макроподстановка в Select ...
    #32004542
N_Michael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To Gennady:

>Если у Вас не MSSQL 2000 то с inline function - обломинго
>они появились только в этой версии сервера.
Так что это такое? Может только из-за этого и стОит SQL 2000 установить. Все равно пока только играюсь/пробую всякие всякости реализовать/ чтобы более быстро перенести данные туда и написать/перенести отчетность (I этап). Я SQL 7 поставил, т.к. решил что там будет меньше глюков (всетаки 3 патча вышло), может действительно SQL 2000 или пока рано? подскажите гуру!!!

С уважением, Михаил.
...
Рейтинг: 0 / 0
Макроподстановка в Select ...
    #32004558
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
inline functions, или UDF (user defined functions) появились в версии 2000. Они позволяют создать пользовательскую функцию (именно функцию, а не процедуру), которую, в частности, можно использовать в запросе:
select Fld1, Fld2, MyFunction1(Fld1,Fld2) where Fld3=MyFunction2(Fld4)
На хранимых процедурах ничего подобного в принципе сделать невозможно - нужно выкручиваться на временных таблицах.
Вообще, в этой версии много чего хорошего появилось (вкратце):
- каскадные оперции обеспечения ссылочной целостности (DRI) подобно тому, как это было в Access (еще додревних версий)
- материализованные представления
- новый тип данных Variant
- instead-триггеры, отрабатывающие ДО DRI. Их можно цеплять не только к таблицам, но и ко VIEW
- Существенно развиты возможности DTS.
К сожалению, вместе с большим количеством усовершенствований, в эту версию внесено не менее существенное количество глюков. Смотри, что для тебя важнее. Если безглючность, то лучше 7.0. Если новые функциональные возможности, то 2000, конечно же, гораздо более продвинутый.
...
Рейтинг: 0 / 0
Макроподстановка в Select ...
    #32004569
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Garya

Да уж. список новых фич можно продолжать и продолжать
В связи с этим у меня появился вопрос, думаю его лучше вынести в новую ветку
...
Рейтинг: 0 / 0
Макроподстановка в Select ...
    #32004769
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, что ответом на Ваш вопрос является использование sp_executesql (по-моему в 7.0 эта XP уже есть). Пример использования в BOL приведён.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Макроподстановка в Select ...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]