我想不通爲什麼這些事情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),我想知道爲什麼函數產生一個零長度的字符串。
編輯 我現在的功能現在看起來是這樣,但仍然會返回一個ZLS,而不是爲P:
電流功能 - 仍然返回ZLS
ALTER FUNCTION [DBO] [PENDS_BAA_ParProvider] (@ProviderNumber VARCHAR)
返回值VARCHAR(15) AS BEGIN
申報@result VARCHAR(15)
組@結果= ISNULL((SELECT CASE WHEN PROVIDERPARSTATUS爲NULL,則 '' 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 ([email protected] AND CONTRACTS.TermDate=0)),'')
返回@Result END GO
我不認爲上查詢返回p 。我認爲它返回6. – 2014-09-03 00:54:17
答案必須是'PROVIDERPARSTATUS'對於'ProviderNbr ='P18292''不等於'P'。如果它等於另一個只看起來像P的角色呢? – ErikE 2014-09-03 01:01:22
@DanBracuk他意味着第一個SQL語句的第二列,而不是'Len'的結果。 – ErikE 2014-09-03 01:02:30