Я пытаюсь оптимизировать огромный запрос SQL, который был написан разработчиком-самоучкой, который использовал тонну функций вместо JOINS.В любом случае, у меня возникают проблемы с отображением пробела или пустой строки (''), когда в выбранном поле нет значения.Я включил только SELECT в вопросе.У меня самая странная проблема или я просто пропускаю правильный ответ при устранении неполадок.Всякий раз, когда я использую COALESCE, когда поле должно быть пустой строкой, оно отображает ноль.И когда я использую IS NULL, я возвращаю NULL.Вся информация в Интернете, кажется, указывает на использование COALESCE (значение, ''), как показано в коде.Но я получаю 0 вместо ''.Кто-нибудь видит, что я делаю не так?Я использую SSMS.
SELECT
pss8.dbo.xml_StripIllegalChars(dbo.rpt_get_series_volume(b.bookkey)) AS p_seriesvol --SELECT to be replaced that works but is slow due to function use I am told
,COALESCE(bd.seriesvolume, '') AS p_seriesvol --my SELECT that won't work!
FROM
bookdetail bd
WHERE
--bd.bookkey='303177'
bd.bookkey='6002'
Буквы внизу предназначены для тестирования, так как я знаю, что верхний возвращает 1, а нижний возвращает '' ранее, когда он работал.SELECT над моим прокомментированным SELECT - это код, который работает, но работает медленно ... Согласно тому, что я читал в Интернете, я говорю: «Если нет номера тома серии, то он равен пустой строке».COALESCE не работает так?Может ли он вернуть только 0, если поле не имеет значения или в этом случае не имеет номера тома?Вся помощь высоко ценится.Мне очень любопытно услышать решение!
Вот еще информация.Вот как работает этот SELECT: pss8.dbo.xml_StripIllegalChars(dbo.rpt_get_series_volume(b.bookkey)) AS p_seriesvol
Функция
.rpt_get_series_vol
позволяет создать пустую строку с этим кодом ... Показывает ли это что-нибудь?
DECLARE @RETURN
VARCHAR(5)
DECLARE @v_desc
VARCHAR(5)
DECLARE @i_volumenumber INT
SELECT @i_volumenumber = volumenumber
FROM bookdetail
WHERE bookkey = @i_bookkey and volumenumber <> 0
IF @i_volumenumber > 0
BEGIN
SELECT @RETURN = CAST(@i_volumenumber as varchar(5))
END
ELSE
BEGIN
SELECT @RETURN = ''
END
RETURN @RETURN
END