1

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

以下は与えられたSPです

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 

where句では、Project Home Group(@ProjHomeGrp)とProject Hierarchy(@ProjHier)がパラメーターであり、指定された場合(1を超える)SPがゼロ値を返すことがわかります。

私が渡している値は次のとおりです。

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

ご不明な点がございましたらお知らせください。

4

3 に答える 3

1

これは間違っているように見えます:

[Project Home Group] IN ( @ProjHomeGrp )

タイプで使用することはできずINNVARCHARセットベースの操作を直接使用できると期待できます。

これはあなたが探しているものに近いかもしれません:

[Project Home Group] = @ProjHomeGrp

そして(ここでの使用から推測してIN)パラメータを区切りテキストとして使用している場合NVARCHAR(MAX)(たとえば、区切り文字としてコンマを含む整数)、より良い方法があります-そのようなものにはテーブル値パラメータを使用する必要があります。

于 2012-05-07T10:47:42.077 に答える
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 
于 2012-05-07T11:26:23.063 に答える
0

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

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

次のような手順を実行します。

exec Sproceduresome

結果や出力を表示しません

于 2014-05-03T08:04:47.553 に答える