2016-06-24 47 views
1

非常に単純なストアドプロシージャがあります。本質的には、単一のテーブルに基づくビューに基づくSELECTステートメントです。ストアドプロシージャSQLに一致しないレコードセット

SELECTステートメントを別々に実行すると、結果が1セット得られます。ストアドプロシージャを実行すると、別のステートメント(実際には最初のサブセット)が表示されます。

これは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 [email protected] 
      AND d.DIMENSIONCODE=1 
      ORDER BY NUM 
+2

そして、私たちは* SQLコードなしでこれにどのように答えなければなりませんか? –

+1

ようこそスタックオーバーフロー! [良いSQL質問をするためのヒント](http://meta.stackoverflow.com/a/271056/2835541)をお読みください。 –

+0

申し訳ありません、コードの下に –

答えて

1

あなたは

DECLARE @DataAreaId nvarchar(4) 

を実行して、SPに:

@DataAreaId nvarchar(3) 

ちょうどnvarchar(max)を使用してもSP nvarchar(4)に修正したり、

関連する問題