从我的存储过程接收0结果

时间:2015-04-27 20:50:25

标签: sql sql-server stored-procedures

我正在尝试在SQL Server中运行存储过程,并且我得到0结果。我最初运行得很好(附加到SSRS),但随后用户请求ProviderName参数的多值输入,我意识到我在我脑海中。我联系了我们的供应商,他提供了一篇我基本上复制并粘贴的知识库文章。见下文......

ALTER PROCEDURE [dbo].[Test]
   (@dStartDate DATETIME
   ,@dEndDate DATETIME
   ,@nProviderName VARCHAR(MAX)
   ,@nAllProviderName VARCHAR(1) = 'N')
AS
BEGIN
    DECLARE @dStart AS DATETIME = CONVERT(DATETIME,CONVERT(DATE,@dStartDate)) ;
    DECLARE @dEnd   AS DATETIME = DATEADD(ms,-3, DATEADD(day,1,CONVERT(DATETIME,CONVERT(DATE,@dEndDate))))
    DECLARE @cProviderName AS VARCHAR(MAX) = @nProviderName
    DECLARE @tProviderName AS TABLE (PCPID VARCHAR(MAX) NOT NULL);

    IF UPPER(@nAllProviderName) = 'N'
    BEGIN
        INSERT INTO @tPCPName ( PCPID )
           SELECT LTRIM(RTRIM(Item)) 
           FROM [dbo].[Auto_Split]('|',@nProviderName ) ;
    END;

    SELECT      ...

    WHERE   
       ([TestMnemonic] = 'GLU' OR
        [TestMnemonic] = '%HA1C')       
       AND [Status] != 'DIS CLI'        
       AND [TextLine] IS NOT NULL           
       AND [DateTime] BETWEEN @dStart AND @dEnd 
       AND (UPPER(@nAllProviderName) = 'Y' OR
            [PCPID] COLLATE DATABASE_DEFAULT
               IN (SELECT PCPID FROM @tProviderName ) ) ; 
END

因此,如果我注释掉最后4行代码,它运行正常。所以它最后一点(或顶部的东西?)我希望这是一个快速解决方案,任何和所有的帮助表示赞赏!

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为你需要在最后一行用@tPCPName切换@tProviderName。

如果你的@nAllProviderName是“N”而不是从名为@tPCPName的内存表中搜索PCPID

并且有一些代码缺失,所以我没有得到完整的图片..如果你可以把你的来自并加入你的错误“where子句”,当你的@nAllProviderName是“Y”时

并且您在SQL中不需要此部分

IF UPPER(@nAllProviderName) = 'N'
BEGIN
    INSERT INTO @tPCPName ( PCPID )
       SELECT LTRIM(RTRIM(Item)) 
       FROM [dbo].[Auto_Split]('|',@nProviderName ) ;
END

如果您使用

切换最后一行
 AND (UPPER(@nAllProviderName) = 'Y' OR
            [PCPID] COLLATE DATABASE_DEFAULT
               IN ( SELECT LTRIM(RTRIM(Item)) 
           FROM [dbo].[Auto_Split]('|',@nProviderName ) ) ) ; 

答案 1 :(得分:0)

我对底部的Collat​​e声明感到好奇。我们的系统默认是什么,在与你制作的临时表进行比较时,你真的需要它吗?

没有整理

OR [PCPID] IN (SELECT PCPID FROM @tProviderN