Имя: Пароль:
1C
 
Помогите разобрать запрос ms sql
0 НичегоНе Понятно
 
11.04.20
14:43
Извините за тупые вопросы, слишком давно был mssql и был он в каком то другом виде, тут чего то туплю. Есть вот такой запрос:
ВЫБРАТЬ
    ТоварыВРозницеОстатки.Номенклатура
ИЗ
    РегистрНакопления.ТоварыВРознице.Остатки КАК ТоварыВРозницеОстатки
ГДЕ
    ТоварыВРозницеОстатки.КоличествоОстаток > 0
    И ТоварыВРозницеОстатки.Номенклатура.Выгружать

Он конвертируется в такой запрос в профайлере
exec sp_executesql N'SELECT
T1.Fld7306RRef
FROM (SELECT
T2._Fld7306RRef AS Fld7306RRef,
CAST(SUM(T2._Fld7310) AS NUMERIC(32, 8)) AS Fld7310Balance_
FROM _AccumRgT7313 T2 WITH(NOLOCK)
WHERE T2._Period = P1
GROUP BY T2._Fld7306RRef
HAVING (CAST(SUM(T2._Fld7310) AS NUMERIC(32, 8))) <> @P2) T1
LEFT OUTER JOIN _Reference53 T3 WITH(NOLOCK)
ON T1.Fld7306RRef = T3._IDRRef
WHERE (T1.Fld7310Balance_ > @P3) AND T3._Fld8230 = 0x01',N'P1 datetime2(3),@P2 numeric(10),@P3 numeric(10)','5999-11-01 00:00:00',0,0

Вот какие вопросы
1. N'P1 datetime2(3),@P2 numeric(10),@P3 numeric(10)' это он сначала перечисляет типы параметров а потом уже вот здесь '5999-11-01 00:00:00',0,0 их значение?
2. HAVING как я понял это условие на группировку которую он делает для таблицы итогов, но почему не равно ноль? ведь я указывал больше ноля в 1с запросе?
1 Волшебник
 
модератор
11.04.20
14:53
условие "Остаток > 0" здесь
T1.Fld7310Balance_ > @P3
2 H A D G E H O G s
 
11.04.20
14:55
(0) Он всегда вложенным запросом сворачивает итоговую таблицу, потому что в 8.3 может быть несколько итоговых записей, потому что есть РазрешитьРазделениеИтогов
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.