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

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

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

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

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

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

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

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

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

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

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

create View SuperView as

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

go

select * from SuperView
where меняющиеся_условия
...
Рейтинг: 0 / 0
19.04.2001, 13:34
    #32004522
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макроподстановка в Select ...
Аааа, а то я уже подумал, что можно каким-то образом создавать View с параметрами
Теперь понятно
...
Рейтинг: 0 / 0
19.04.2001, 14:35
    #32004529
Victor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макроподстановка в Select ...
Если имеется стандартный набор условий для 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
19.04.2001, 15:05
    #32004532
N_Michael
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макроподстановка в Select ...
Всем большое спасибо за ответы.

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

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

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

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

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

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

С уважением, Михаил.
...
Рейтинг: 0 / 0
19.04.2001, 21:19
    #32004558
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макроподстановка в Select ...
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
20.04.2001, 09:21
    #32004569
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макроподстановка в Select ...
2 Garya

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


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