Страница 2 из 2
Добавлено: 29 окт 2007, 16:28
Александр
понимаешь в том то и дело что запрос
Код: Выделить всё
SELECT
Coalesce((SELECT vv.value FROM lsdbo.attrib_value_view av, lsdbo.value_string_view vv
WHERE av.value_id = vv.id AND av.object_id = rw.id AND av.attrib_id = 3000000000002),'')
FROM lsdbo.object_reference_view rw,lsdbo.object_type_view
WHERE (rw.type_id = lsdbo.object_type_view.id) and (rw.id =4000000015666)
в QA выдает ошибку
Server: Msg 8624, Level 16, State 21, Line 1
Internal SQL Server error.
Добавлено: 29 окт 2007, 16:32
Александр
to Disillusioned
а что за функция GetStrValue откуда она, я уже весь дымлюсь

Добавлено: 29 окт 2007, 16:36
Disillusioned
Да сам напиши ее и назови как хочешь. Внутри функции выборка значения + если значение IS NULL то присвоение значения по умолчанию.
Добавлено: 29 окт 2007, 16:40
Александр
на хп чтоль-да ну ее нафиг... из за такой мелочи..., тут хочу разобраться- в стандартной функции ms sql? Кстати а ведь есть же такая функция у самой Лоции - осталось поискать ее, ну хотя это тоже не совсем то
Добавлено: 29 окт 2007, 16:51
Disillusioned
Тогда может лучше на SQL.RU?
Если выборка значений атрибута мелочь, то что тогда в Лоции не мелочь? Ту же самую функцию можно и в ХП использовать, да и работать с функциями удобнее хотя бы из-за компактности записи (особенно в редакторе действий).
Хотя, конечно, дело вкуса...
Что касается поиска функции Лоции, уверен, он займет больше времени, чем написание собственной...
Добавлено: 29 окт 2007, 17:02
Юрий
перепишы запрос в следующем виде и все будет Ок!
SELECT Coalesce(vv.value,'')+' '+Coalesce(vv1.value,'')
FROM lsdbo.object_reference_view rw
left join lsdbo.object_type_view ot on rw.type_id = ot.id
-- первый атрибут
left join lsdbo.attrib_value_view av on rw.id = av.object_id and av.attrib_id = 3000000000002
left join lsdbo.value_string_view vv on av.value_id = vv.id and av.attrib_id = 3000000000002
-- сдедующий атрибут
left join lsdbo.attrib_value_view av1 on rw.id = av1.object_id and av1.attrib_id = 3000000000001
left join lsdbo.value_string_view vv1 on av1.value_id = vv1.id and av1.attrib_id = 3000000000001
where rw.id=100001101830067
Добавлено: 30 окт 2007, 08:54
Александр
Да все Ок
а скажи - если знаешь... в чем могло быть дело - почему эта функция не работает с простым синтаксисом Лоции - а только с объединениями в стиле microsoft?? точнее не так... почему работает с переменными а с прямыми запросами нет - нигде в документации ничего похожего не нашел (мы используем в этом филиале MSSQL2000 SP4)
Добавлено: 30 окт 2007, 09:14
Юрий
Почему в стиле Microsoft??? Кто тебе такую ерунду сказал.
Объясню почему я использую join - при таком синтаксисе SQL активно использует индексы и выбирает оптимально данные.
А в этом стиле я писал не только на MSSQL я пришел к такому написанию после программирования отчетов и интерфейсов для системы "Галактика". Причем стояла она не на MSSQL.
И была такая-же проблема с быстродействием пришлось попотеть.
И кстати мне помог их трактат(разработчиков "Галактики") по оптимизации работы с базой.
Да у Лоции очень незатейливый синтаксис, отсюда и скорость.

Добавлено: 30 окт 2007, 09:21
Юрий
Да совсем забыл - при таком написании у тебя не будет в MSSQL ограничения на 10 атрибутов.
Добавлено: 30 окт 2007, 09:25
Александр
Все мои познания в SQL ограничиваются книжкой для хакеров по Transact-SQL

, к сожалению мыслить множествами до сих пор не получается также как и при переходе на ООП в свое время, - нужно чтобы в голове все перевернулось в очередной раз

Добавлено: 30 окт 2007, 09:38
Юрий
У меня примерно 1.5 года пошло на то что-бы все это в голове осело и я разобрался более менее как делать быстрые запросы.
Причем занимался все это время только запросами.
И то постоянно узнаю чтонибудь новенькое!
