Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Макроподстановка в хранимой процедуре / 8 сообщений из 8, страница 1 из 1
14.10.2002, 12:56:50
    #32057921
Maksim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макроподстановка в хранимой процедуре
А вот скажите, реально ли внутри хранимой процедуры сделать SELECT с условием, изменяющимся динамически в зависимости от передаваемого параметра? А то вынес весь "паровоз" длинного SQL-запроса в ХП, а потом обнаружил, что он у меня строится динамически в зависимости от прав доступа конкретного юзера. Т.е. иногда в запрос может попадать дополнительное условие типа CHARINDEX(ZAVOD,'EEJ')>0 или еще что-то.

Похоже придется перетаскивать "паровоз" обратно в PHP :(
...
Рейтинг: 0 / 0
14.10.2002, 12:58:52
    #32057923
ms
ms
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макроподстановка в хранимой процедуре
легко. см.BOL - CASE и EXEC
...
Рейтинг: 0 / 0
14.10.2002, 13:00:29
    #32057924
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макроподстановка в хранимой процедуре
EXEC [ UTE ] ( { @string_variable | [ N ] 'tsql_string' } [ + ...n ] )
...
Рейтинг: 0 / 0
14.10.2002, 13:11:53
    #32057931
Corsair
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макроподстановка в хранимой процедуре
Такое сделать можно, но придется в хранимой процедуре формировать строку SQL запроса динамически в зависимости от ваших условий, а когда строка сформирована вызывать Exec(@SQLStr). Кстати, в данной строке придется делать вставку полученного результата в какую-нибудь временную таблицу, из которой потом и селектить необходимые данный.
...
Рейтинг: 0 / 0
14.10.2002, 13:56:41
    #32057954
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макроподстановка в хранимой процедуре
Кстати, в данной строке придется делать вставку полученного результата в какую-нибудь временную таблицу, из которой потом и селектить необходимые данный.
А зачем?
Код: plaintext
1.
2.
3.
4.
5.
6.
create proc #p
as
declare @s varchar( 99 )
set @s='select * from sysobjects'
exec(@s)
go
#p
...
Рейтинг: 0 / 0
14.10.2002, 14:48:08
    #32057999
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макроподстановка в хранимой процедуре
...
Рейтинг: 0 / 0
14.10.2002, 14:48:21
    #32058001
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макроподстановка в хранимой процедуре
если ветвление по условиям небольшое, то лучше сделать наверно через IF'ы или CASE. Если условие тяжело строить подобным образом - тогда уже предложенный вариант: EXEC или sp_executesql. Временная таблица вряд ли понадобится.
...
Рейтинг: 0 / 0
14.10.2002, 15:03:46
    #32058019
Corsair
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макроподстановка в хранимой процедуре
2 SergSuper:
Это в случае если автору нужно просто вывести результат запроса (что врядли, ведь для этого можно и не городить процедуру). А если необходимо использовать результат полученного запроса для каких-либо операций внутри процедуры (типа Select Into или при создании курсоров), вот тут-то и необходима будет временная таблица.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Макроподстановка в хранимой процедуре / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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