1

値が複数あるパラメータを持つストアドプロシージャ(SSRSで使用される)を作成しました。 SSMSでこのストアドプロシージャを実行すると、そのパラメータの値が提供されますが、SPは結果を返しません。これは、以上の1行以下ストアドプロシージャが結果を表示しない

値あなたがでwhere句、プロジェクト・ホーム・グループ(@ProjHomeGrp)とプロジェクト階層(@ProjHierが)のパラメータであることがわかります

CREATE PROCEDURE [dbo].[sp_tst_CSENG_JulieCapitalHours] 
     @StartDate DATETIME , 
     @EndDate DATETIME , 
     @ProjHomeGrp NVARCHAR(MAX) , 
     @ProjHier NVARCHAR(MAX) 
AS 
BEGIN 
    SELECT [Capital Project] , 
        [Capital Task] , 
        ResourceName , 
        ProjectName , 
        [Project Home Group] , 
        ActualWork , 
        TimeByDay , 
        ResourceStandardRate , 
        ActualWork * ResourceStandardRate AS Dollars , 
        [Project Hierarchy] 
    FROM [IR.CapOnly] 
    WHERE (TimeByDay >= @StartDate) 
     AND ([Project Home Group] IN (@ProjHomeGrp)) 
     AND (TimeByDay <= @EndDate) 
     AND (ActualWork > 0) 
     AND ([Project Hierarchy] IN (@ProjHier)) 
    ORDER BY ProjectName , 
      ResourceName 
END 

与えSP、あるを返す必要があります供給された(1以上の)SPはゼロ値を返す。

私は渡している値は以下のとおりです。

Start Date: 1/1/2011 
End Date: 12/31/2012 
@ProjHomeGrp : PHG1,PHG2,PHG3,PHG4,PHG5,PHG6,PHG7 
@ProjHier: PROH1, PROH2, PROH3 

は私が質問のために知ってみましょう!

+0

この問題はProject Home Group(@ProjHomeGrp )とプロジェクト階層(@ProjHier)パラメータをコンマで区切ります。あなたは、Project Home Group(@ProjHomeGrp)とProject Hierarchy(@ProjHier)パラメータの単一の値で同じ問題に直面していますか? –

答えて

0

Odedが述べたように、テーブル値のパラメータは、行く方法です。しかし、ここでは、動的SQLに基づくソリューションは

...意味するものでは可能性のあるすべての問題と、ある
create procedure [dbo].[sp_tst_CSENG_JulieCapitalHours] 
     @StartDate datetime , 
     @enddate datetime , 
     @ProjHomeGrp nvarchar(MAX) , 
     @ProjHier nvarchar(MAX) 
    as 
begin 
    declare @sql nvarchar(max) 
    declare @paramDefs nvarchar(max) 

    select @sql = N'select [Capital Project] , 
      [Capital Task] , 
      ResourceName , 
      ProjectName , 
      [Project Home Group] , 
      ActualWork , 
      TimeByDay , 
      ResourceStandardRate , 
      ActualWork * ResourceStandardRate AS Dollars , 
      [Project Hierarchy] 
    from [IR.CapOnly] 
    where (TimeByDay >= @StartDate) 
      and ([Project Home Group] IN (' + @ProjHomeGrp + ')) 
      and (TimeByDay <= @EndDate)) 
      and (ActualWork > 0) 
      and ([Project Hierarchy] IN (' + @ProjHier + ')) 
    order by ProjectName, ResourceName' 

    select @paramDefs = N'@StartDate datetime, @EndDate datetime' 

    exec sp_executesql @sql, @paramDefs, @StartDate = @StartDate, @EndDate = @EndDate 
end 
+0

ありがとう@David Brabant。私はSPにあなたのクエリを適用し、それはOKを実行しました。しかし、私が前に行ったようにパラメータを渡しているときに、私はまだ値を取得していません(0行) –

+0

ここにコピー/貼り付けたSQLステートメントにタイプミスがありました(StartDateではなくStartDat)。ステートメントを確認してください。また、SQL Serverデバッガの@sql文字列が正しいことを確認してください。その文字列を新しいセッションに貼り付けて、結果が期待通りのものであることを確認します。 –

+0

私は何のエラーであなたの答えを編集しました。 –

1

これは間違っているになります。

[Project Home Group] IN (@ProjHomeGrp) 

あなたはNVARCHARタイプでINを使用して、直接にセットベースの操作を使用できるように期待することはできません。

これは、あなたが探しているものに近いことがあります(区切りにカンマで整数を言うあなたは区切りのテキストとしてNVARCHAR(MAX)パラメータを使用している場合

[Project Home Group] = @ProjHomeGrp 

そして(INの使用から、ここでは推測) )、より良い方法があります - そのようなことにはTable Valued Parametersを使用する必要があります。

+0

コメントありがとうございます。私はちょうど私が渡している値で私の質問を更新しました。ここで助けてくれますか? @SmithPascalJr。 –

+0

。 - 助けて?私はTVPを信じていますが、答えは最高の選択肢です。 – Oded

0

のようなプロシージャを作成します。

exec Sproceduresome 

CREATE PROCEDURE Show_Sproceduresome 
    AS 
Begin 
    select points,coursename,c.type from OfferType o,Courses c,Candidate cd, CourseOffer 
    where name = 'Francisco' 
    and o.OfferId = co.OfferId 
    and co.CourseId = c.CourseId 
    and co.UCASNumber = cd.UCASNumber 
End 

は次のように手順を実行します

結果が表示されない、または出力されない

関連する問題