Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выбрать запись или все записи  [new]
minva
Member

Откуда: г. Калуга
Сообщений: 1199
Задача: выбрать все записи для всех счетов клиента или для конкретного счета, смотря что пользователь выбрал.
В подобных случаях я давно уже пишу так:
SELECT   M.*          
FROM 
  V_AccountTrans as M	
WHERE M.ClientCode = @ClientCode 
         and (M.AccountNumber = @AccountNumber or @AccountNumber = -1)
         and M.TransType IN (0, 1, 2)		
order by M.AccountNumber, M.TransTime DESC

Параметр -1 передается, если нужно выбрать все счета.
В общем-то на тех объемах данных, которые есть и еще долго будут, это все работает вполне себе отлично и жить не мешает.
Не вдаваясь в подробности именно этого запроса, а в общей теории - есть ли какие подводные камни в такой записи условия - or @AccountNumber = -1?
а то дьявол в нюансах таится, и как обычно бывает, даже если что-то где-то написано, то либо мимо глаз проскальзывает либо в конце мелким шрифтом :)
8 май 18, 15:35    [21396170]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать запись или все записи  [new]
iiyama
Member

Откуда:
Сообщений: 642
minva,

Вы про это?
8 май 18, 16:45    [21396389]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать запись или все записи  [new]
invm
Member

Откуда: Москва
Сообщений: 9115
minva
есть ли какие подводные камни в такой записи условия - or @AccountNumber = -1?
Один огромный подводный камень - если есть подходящий индекс по AccountNumber, то он не будет использоваться для поиска. Возможно только его сканирование.
Либо дописывайте к запросу option(recompile), либо перепписывайте через union all:
SELECT   M.*          
FROM 
  V_AccountTrans as M	
WHERE M.ClientCode = @ClientCode 
         and @AccountNumber = -1
         and M.TransType IN (0, 1, 2)		

union all

SELECT   M.*          
FROM 
  V_AccountTrans as M	
WHERE M.ClientCode = @ClientCode 
         and @AccountNumber <> -1
         and M.AccountNumber = @AccountNumber
         and M.TransType IN (0, 1, 2)

order by AccountNumber, TransTime DESC
8 май 18, 16:49    [21396406]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить