存储过程记录集与SQL不匹配

时间:2016-06-24 11:26:33

标签: sql-server stored-procedures

我有一个非常简单的存储过程,基本上是基于单个表的视图的SELECT语句。

当我单独运行SELECT语句时,我得到一组结果,当我运行存储过程时,我得到一个不同的(实际上是第一个的子集)。

这是使用SQL Server 2008 Management Studio。

有没有人知道如何发生这种情况?

我尝试重新编译存储过程并删除并重新创建它,并且值不会改变。

基础表实际上是SYNONYM到不同数据库中但在同一服务器上的表。

CREATE PROCEDURE [dbo].[usp_RPT_SelectCostCentre2]
     (@DataAreaId nvarchar(3))
AS
BEGIN
    SELECT 
        'All' AS 'NUM',
        ' All Cost Centres' AS 'Description'

    UNION

    SELECT DISTINCT 
        d.NUM,
        CASE
           WHEN d.DESCRIPTION='' THEN d.NUM
           ELSE d.DESCRIPTION
        END AS 'Description'
    FROM 
        v_BAS2_Dimensions AS d
    WHERE 
        d.DataAreaId = @DataAreaId
        AND d.DIMENSIONCODE=1
    ORDER BY 
        NUM
END

单个SQL语句运行以测试:

    @DataAreaId nvarchar(4)
    --
    SET @DataAreaID='bkt2'

        SELECT 'All' AS 'NUM'
              ,' All Cost Centres' AS 'Description'
        UNION
        SELECT DISTINCT d.NUM
                       ,CASE
                          WHEN d.DESCRIPTION='' THEN d.NUM
                          ELSE d.DESCRIPTION
                        END AS 'Description'
          FROM v_BAS2_Dimensions AS d
          WHERE d.DataAreaId=@DataAreaId
            AND d.DIMENSIONCODE=1
          ORDER BY NUM

1 个答案:

答案 0 :(得分:1)

你跑

DECLARE @DataAreaId nvarchar(4)

在SP中:

@DataAreaId nvarchar(3)

只需修复SP nvarchar(4)或甚至使用nvarchar(max)