Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Условия в SP
|
|||
|---|---|---|---|
|
#18+
Привет, All! Первый раз в этом форуме, так, что заранее извиняюсь за, возможно, уже прозвучавший вопрос. В VB я открывал рекордсет, предварительно подготавливая для него строку запроса, в зависимости от условий. Что-то типа: S = "SELECT * FROM anytable" If SomeValue <> "*" Then S = S & " WHERE anyfield = " & SomeValue End If RS.Open S, ADOConnect (простейший пример) Теперь я стал круче и решил вынести запросы на сервер в хранимые процедуры. Собственно, вопрос: каким образом я могу в процедуре создать конечный SQL запрос, в зависимости от значений переменных, передаваемых в нее? Просьба вариант типа: IF @SomeValue != '*' BEGIN SELECT * FROM anytable WHERE anyfield = @SomeValue ELSE SELECT * FROM anytable END ... IF ... BEGIN ... ELSE ... END и т.д. и т.п. не предлагать, потому, что таких условий тьма тьмущая. Заранее спасибо. P.S. Здорово тут у вас, а главное - все темы по теме в отличии от многих форумов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 02:43 |
|
||
|
Условия в SP
|
|||
|---|---|---|---|
|
#18+
Я тоже восхищаюсь данным форумом. Я в нем не давно, но успел узнать очень много нового. CREATE procedure SelFromSomeTable(@TableName varchar(100), @Where varchar(1000)) as declare @SQL varchar(1000) create Table #TempTable(F1 varchar(100)) insert into #TempTable exec MyProc @TableName set @SQL='select * from #TempTable ' + @Where exec(@SQL) drop table #TempTable GO Вот. как наверно по параметрам понятно, эта процедура возвращает данные из некоторой таблицы @TableName. Может возникнуть проблема с тем, что у временной таблицы(#TempTable) всего одно поле, но это решаемо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 05:20 |
|
||
|
Условия в SP
|
|||
|---|---|---|---|
|
#18+
2 RoKo и т.д. и т.п. не предлагать, потому, что таких условий тьма тьмущая. "А Вам, Шариков, надо молчать и слушать, молчать и слушать!" (С) "Камень, отложенный строителями, оказался во главе угла здания" (Это уже из Нового Завета) Что хотим, то и предлагаем CREATE procedure SelFromSomeTable @somevalue varchar(666) as SELECT * FROM anytable where @somevalue='*' or anyfield =@somevalue ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 10:30 |
|
||
|
Условия в SP
|
|||
|---|---|---|---|
|
#18+
2 SergSuper Будем знать. Еще раз спасибо за опыт! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 12:22 |
|
||
|
Условия в SP
|
|||
|---|---|---|---|
|
#18+
2 SergSuper Будем знать. Еще раз спасибо за опыт! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 12:22 |
|
||
|
Условия в SP
|
|||
|---|---|---|---|
|
#18+
2Slava, 2SergSuper Большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 21:01 |
|
||
|
Условия в SP
|
|||
|---|---|---|---|
|
#18+
Народ, а собственно с чего вы взяли, что перенос логики по собиранию условий из скрипта в SP - это улучшение? Есть какие-то данные по сравнению производительности? Лично мой опыт показывает, что это все смена шила на мыло. Но при этом вы теряете в переносимости. А еще скрипты на .Нет будут компилиться. Слава, а не могли бы вы пояснить мутилово со временной таблицей в вашем варианте. Я что-то никак не пойму зачем она там нужна . И почему нельзя просто ввести 3-й параметр @sFieldsToSelect (например: "item_id, item_name")? И что делает процедура MyProc? > create Table #TempTable(F1 varchar(100)) > insert into #TempTable exec MyProc @TableName ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2001, 19:05 |
|
||
|
Условия в SP
|
|||
|---|---|---|---|
|
#18+
<Слава, а не могли бы вы пояснить мутилово со временной таблицей в вашем варианте. Что-то в этом предложении не по русски. Смысл не ясен. Может это очень обидно для меня? Поясняю. MyProc может возвращать данные из заранее неизвестной таблицы. Я ее ввел для улучшения читаемости кода. Если необходимо реализовать сложный алгоритм, то лучше это делать поэтапно(Deplhi5 научила). В варианте SergSuper все равно EXEC нажна. Я ее просто в другую процедуру вынес. Про временную таблицу объямнять не буду, если специально не попросите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2001, 05:20 |
|
||
|
Условия в SP
|
|||
|---|---|---|---|
|
#18+
2 Slava. Обидеть не хотел, честое слово. Я просто не думал, что слово "мутилово" может кого-то обидеть. По поводу временной таблицы, я все-таки спрошу, потому что я ничего не понимаю в этом примере. Почему не сделать просто вот так: DECLARE @tableName as nvarchar(50), @sqlStr as nvarchar(100) SET @tableName=N'atable' SET @sqlStr = N'select * from ' + @tableName execute sp_executesql @sqlStr ? Соответсвенно вместо * можно укзать список полей, ну и where добавить. Насчет exec у СуперСерга, вроде бы его там не нужно, если я правильно понял, просто для каждого запроса надо будет писать свою SP, которая будет принимать свой набор параметров. Так вот меня собственно интересует вот какой вопрос: а зачем вообще такую логику запихивать в хранимую процедуру? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2001, 16:08 |
|
||
|
Условия в SP
|
|||
|---|---|---|---|
|
#18+
2 andy На самом деле мы ведь не знаем что это за запрос и для чего нужен. Однако если руссуждать таким образом, что у нас есть некая база которая живет своей жизнью и как-то реагирует на внешние воздействия. Что у ней там твориться внутри - должно быть снаружи неведомо. И вот для этого и нужна такая логика. Некоторое изменение структуры базы(в пределах разумного) тогда не будет приводить к изменению внешних скриптов(в том числе и на .net). В действительности конечно всё сложней и нужно использовать логику как снутри, так и снаружи. С приветом Сергей PS. А Slava работает просто на грани гениальности. Минут пять смотрел на его процедуру - так и не понял величия замысла ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2001, 17:07 |
|
||
|
Условия в SP
|
|||
|---|---|---|---|
|
#18+
2 SuperSerg Вопрос то этот я собственно задал потому, что в первом сообщении этой дискуссии RoKo пишет: >Теперь я стал круче и решил вынести запросы на сервер в хранимые процедуры. А мне вот и хочется разобраться чем же SP круче в данном случае. Если целью запихивания всех запросов в процедуры является создания некого универсального кода, который сможет работать с любыми базами (интересно, что в этом коде собственно останется? открытие и закрытие коннекшена видимо ). Просто мне кажется, что критерий правильности здесь есть только один - скорость работы, если SP дают выигрыш в производительности, то их надо использовать, а нет... А дальше, как правильно заметил СуперСерг, все зависит от ситуации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2001, 19:10 |
|
||
|
Условия в SP
|
|||
|---|---|---|---|
|
#18+
to Andy. Можно флеймить по поводу рациональности/нерациональности того или иного поступка часами, так и не выразив какого-то конкретного мнения. Это, видимо, круто. Но, существуют обстоятельства, не зависящие от крутости критика. К таким относятся: а) недостаточная мощность аппаратного обеспечения (читай - компьютеров), конторы, в которой ты работаешь и на котором запускаются апп., написаные тобою же (есть и 486), а SQL Server стоит на PIII-850/256. Я думаю, в этом случае, рациональнее будет посылать на сервер по сети некий набор условий (а он немаленький - см. первое письмо), а уж сервер сам будет эти условия обрабатывать, чем терзать старенькую четверку множественными SELECT CASE/IF...END IF; б) вообще-то, не я один программер в нашем банке, есть люди, пишущие свои апп. на Delphi/VB - им тоже будет удобнее получать свой рекордсет по переданым условиям, минуя их обработку. Самое главное - ответ на мой вопрос был получен в первых двух письмах, за что я и поблагодарил ответчиков (еще раз спасибо), все остальное - флейм. Извини, Andy, если чем-то задел тебя этим письмом. Предалагаю закрыть тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2001, 21:23 |
|
||
|
Условия в SP
|
|||
|---|---|---|---|
|
#18+
Меня это никак не задело. Просто в сообщении было написано, что пример на ВБ, я по наивности решил, что это скрипт, который выполняется на сервере. И решил собственно вызнать, а чем же собственно лучше такого рода логику перекладывать в хранимые процедуры. Короче забей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2001, 15:33 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32006339&tid=1826631]: |
0ms |
get settings: |
6ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 348ms |

| 0 / 0 |
