Я не могу понять, почему эти 2 вещи возвращают разные результаты.Скалярная функция SQL возвращает неожиданный результат
Этот SQL возвращает букву P:
SELECT PROVIDERS.PROVIDERNBR, CONTRACTS.PROVIDERPARSTATUS
FROM
dwpresentation_prod.dbo.PROVIDERS
INNER JOIN dwpresentation_prod.dbo.CONTRACTS
ON PROVIDERS.PROVIDERNBR = CONTRACTS.PROVIDERNBR
WHERE
PROVIDERS.PROVIDERNBR = 'P18292'
AND CONTRACTS.TERMDATE = 0;
Но это возвращает строку нулевой длины:
SELECT dbo.PENDS_BAA_ParProvider('P18292');
Вот функция:
ALTER FUNCTION [dbo].[PENDS_BAA_ParProvider](@ProviderNumber varchar)
RETURNS varchar(15)
AS
BEGIN
DECLARE @result varchar (15);
SET @result = IsNull((
SELECT
CASE
WHEN PROVIDERPARSTATUS IS NULL THEN ''
WHEN PROVIDERPARSTATUS = 'P' THEN 'P'
ELSE '' END
FROM
dwpresentation_prod.dbo.Providers PROVIDERS
INNER JOIN dwPresentation_Prod.dbo.Contracts CONTRACTS
ON PROVIDERS.ProviderNbr = CONTRACTS.ProviderNbr
WHERE
PROVIDERS.ProviderNbr = @ProviderNumber
AND CONTRACTS.TermDate = 0
), '');
RETURN @result;
END;
Без монологов о том, почему я Я использую функцию, а не инструкцию SQL (ответ в основном связан с экспериментированием и изучением ng), мне интересно, почему функция создает строку с нулевой длиной.
EDIT Моя текущая функция теперь выглядит следующим образом, но все-таки возвращает ZLS, в отличие от P:.
Текущая функция - STILL возвращает ZLS
ALTER FUNCTION [DBO] [PENDS_BAA_ParProvider] (@ProviderNumber VARCHAR)
ВОЗВРАТ VARCHAR (15) КАК НАЧАТЬ
Объявите @result VARCHAR (15)
набор @ результат = IsNull ((SELECT СЛУЧАЙ КОГДА PROVIDERPARSTATUS Is Null THEN ' КОГДА PROVIDERPARSTATUS = 'P' THEN 'P' ELSE '' END
FROM dwpresentation_prod.dbo.Providers PROVIDERS
INNER JOIN dwPresentation_Prod.dbo.Contracts CONTRACTS
ON PROVIDERS.ProviderNbr = CONTRACTS.ProviderNbr
WHERE ([email protected] AND CONTRACTS.TermDate=0)),'')
Вернуться @result END GO
Я не думаю, что верхний запрос возвращает P Я думаю, что он возвращает 6. –
Ответ должен быть таким, что 'PROVIDERPARSTATUS' не равен' P' для 'ProviderNbr = 'P18292''. Что, если он равен другому персонажу, который только * выглядит * как P? – ErikE
@DanBracuk Он означает второй столбец первого оператора SQL, а не результат «Лен». – ErikE