Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выбрать запись или все записи / 3 сообщений из 3, страница 1 из 1
08.05.2018, 15:35
    #39642075
minva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать запись или все записи
Задача: выбрать все записи для всех счетов клиента или для конкретного счета, смотря что пользователь выбрал.
В подобных случаях я давно уже пишу так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
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 ?
а то дьявол в нюансах таится, и как обычно бывает, даже если что-то где-то написано, то либо мимо глаз проскальзывает либо в конце мелким шрифтом :)
...
Рейтинг: 0 / 0
08.05.2018, 16:45
    #39642121
iiyama
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать запись или все записи
minva,

Вы про это?
...
Рейтинг: 0 / 0
08.05.2018, 16:49
    #39642124
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать запись или все записи
minvaесть ли какие подводные камни в такой записи условия - or @AccountNumber = -1 ?Один огромный подводный камень - если есть подходящий индекс по AccountNumber, то он не будет использоваться для поиска. Возможно только его сканирование.
Либо дописывайте к запросу option(recompile), либо перепписывайте через union all:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
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
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выбрать запись или все записи / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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