Я не могу понять, почему эти две вещи дают разные результаты.
Этот 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 (ответ в основном связан с экспериментированием и обучением), мне интересно, ПОЧЕМУ функция создает строку нулевой длины.
ИЗМЕНИТЬ Моя текущая функция теперь выглядит так, но ВСЕ ЕЩЕ возвращает ZLS, а не P:
Текущая функция - STILL возвращает ZLS
ALTER FUNCTION [dbo]. [PENDS_BAA_ParProvider] (@ ProviderNumber varchar)
ВОЗВРАЩАЕТ varchar (15) В НАЧАЛЕ
Объявить @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)),'')
Возврат @result END GO
PROVIDERPARSTATUS
не равноP
дляProviderNbr = 'P18292'
. Что, если он равен другому символу, который только выглядит как P? - person ErikE   schedule 03.09.2014Len
. - person ErikE   schedule 03.09.2014