Запрос к MS SQL | |
---|---|
Аспид Автор Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Собственно есть ХП.
И вот понадобилось к ней добавить параметр, и в зависимости от него либо
Не могу сообразить как это сделать. Про динамический запрос, про if else все ясно. Может какой то простой синтаксис есть, типа case , но в where ? ------------------ |
Re: Запрос к MS SQL | |
---|---|
PaulWist Сообщений: 14601 Дата регистрации: 01.04.2004 |
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Запрос к MS SQL | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
C ID хорошо работает такой способ:
Цитата:Без извращений жизнь не мила... ------------------ Лень - это неосознанная мудрость. |
Re: Запрос к MS SQL | |
---|---|
PaulWist Сообщений: 14601 Дата регистрации: 01.04.2004 |
Серёг.
Ему надо, что бы при определенном значении параметра в where добавить доп. условие, типа - без параметра
- а если пришёл параметр, то д.б.
PS 2Аспид, а чем динамика не нравится, запрос монстрообразный, рекомпиляции боишься? ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) Исправлено 1 раз(а). Последнее : PaulWist, 14.09.16 17:13 |
Re: Запрос к MS SQL | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
Ты так думаешь? Хм, может он и такое хочет... Ну может дождемся уточнений.
------------------ Лень - это неосознанная мудрость. |
Re: Запрос к MS SQL | |
---|---|
Аспид Автор Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Извините, подзадержался)
Я прошу прощения, просто сразу сам не докумекал. Условия должны быть в зависимости от параметра либо id_face = 4 либо id_face <> 4 ближе всех
Но неверный результат при @mat=0 Ясно, что попадают и g.id_iface=4 Динамику не хочу... из спорт. интереса))) Мне легче еще поле (mat) в табл. внести, и проапдейтить по значению g.id_iface=4 и тогда все банально становится) Вот так вроде как правильно.
На тестах верно выдает. Может что то покрасивше мона. (MS sql 2008) ------------------ Исправлено 1 раз(а). Последнее : Аспид, 14.09.16 20:55 |
Re: Запрос к MS SQL | |
---|---|
pasha_usue Сообщений: 3647 Откуда: Е-бург Дата регистрации: 06.10.2006 |
Условия CASE не всегда оптимизируются по индексу. Поэтому я предпочитаю писать так:
Но тем не менее, если написать:
То оптимизатор должен по-идее это место в зависимости от параметра превратить в g.id_iface=@myparam или g.id_iface<>@myparam. |
Re: Запрос к MS SQL | |
---|---|
pasha_usue Сообщений: 3647 Откуда: Е-бург Дата регистрации: 06.10.2006 |
А вот с этой лесенкой, боюсь, оптимизатор не справится. Но не утверждаю. Надо проверять, подхватывается индекс в этой конструкции, или нет. И каким алгоритмом подхватывается индекс. Это тоже важно. |
Re: Запрос к MS SQL | |
---|---|
Аспид Автор Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Спасибо)
------------------ |
Re: Запрос к MS SQL | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
То до оптимизатора дело не дойдет. Ибо в T-SQL нет логического типа и функция case не может вернуть результат такого типа. ------------------ Лень - это неосознанная мудрость. |
Re: Запрос к MS SQL | |
---|---|
PaulWist Сообщений: 14601 Дата регистрации: 01.04.2004 |
Мне вот тоже не понятно, почему для такого случая не использовать динамику, ведь выигрыш очевиден: это рекомпиляция "строки", как "+" прослушивание параметра и получение оптимального плана. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Запрос к MS SQL | |
---|---|
pasha_usue Сообщений: 3647 Откуда: Е-бург Дата регистрации: 06.10.2006 |
Я забываю периодически нюансы разных диалектов SQL. Поэтому, спасибо, что поправили. Но репрокод топикстартер понял, насколько я могу судить. |
Re: Запрос к MS SQL | |
---|---|
pasha_usue Сообщений: 3647 Откуда: Е-бург Дата регистрации: 06.10.2006 |
Выигрыш перед динамическими запросами будет, если бомбить сервак кучей однотипных запросов. Тогда не будет каждый раз тратиться время на компиляцию и поиск плана запроса. |
Re: Запрос к MS SQL | |
---|---|
PaulWist Сообщений: 14601 Дата регистрации: 01.04.2004 |
Если бы у ТС были бы однотипные запросы он бы не пытался поставить условие в where. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Запрос к MS SQL | |
---|---|
Аспид Автор Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Там именно идет получение на клиента некоего списка.
Потом клиент, заполняет по нему детали. Потому именно бомбит сервак таким запросом, но с разными условиями. ------------------ |
Re: Запрос к MS SQL | |
---|---|
PaulWist Сообщений: 14601 Дата регистрации: 01.04.2004 |
Обычно в таких случаях делается так: - заполняется временная/постоянная табличка данными из клиентского списка - в ХП выполняется запрос вида
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Запрос к MS SQL | |
---|---|
Аспид Автор Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Что то не ясен смысл! И задача, не выбрать из таблицы деталей, а именно создать эти детали. Т.е. есть список заказчик+договор. Есть по нему 2 типа отгрузки (во с ними то и была заковыка, в других местах это деление не нужно) и услуги. Все в одной таблице (условно) (Там как раз, типичный мастер-детали) Вот по каждому и выбирается. ------------------ Исправлено 1 раз(а). Последнее : Аспид, 16.09.16 08:34 |
Re: Запрос к MS SQL | |
---|---|
PaulWist Сообщений: 14601 Дата регистрации: 01.04.2004 |
Дык, тут принцип одинаков (независимо от того, что надо сделать: выбрать, обновить, удалить) на сервак в промежуточную табличку заливаешь данные с клиента (причем в этой табличке можно нафигачить сколько хочешь условий), затем вызываешь ХП, которая знает про эту табличку и уже работает с ней (select, insert, update, delete/merge) ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Запрос к MS SQL | |
---|---|
Аспид Автор Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
PaulWistпонял твою мысль)))
Не... на серваке мне все это не надо. Там и так все складно. Мне это тока на клиент надо. ------------------ |
Re: Запрос к MS SQL | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Тогда на клиенте и держать 2 разных, но простых запроса (без выкаблучиваний с параметром-отключетелем/переключателем условий).
------------------ WBR, Igor |
© 2000-2024 Fox Club  |