0

次のようなストアド プロシージャがあります。

ALTER procedure [dbo].[ParkingDeatailsReportnew] 
  @locid INTEGER, @startdate nvarchar(100),@enddate nvarchar(100)
 as
begin
DECLARE @cols AS NVARCHAR(MAX),
  @query  AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Vtype)      from VType_tbl FOR XML PATH(''),   TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'')
set @query = 'SELECT Date, ' + @cols + '  from  ( select v.Vtype, convert(date, dtime) as Date 
  from Transaction_tbl t inner join VType_tbl v   on t.vtid = v.vtid  where dtime between ''' + @startdate + ''' and ''' + @enddate +  '''and locid =  ' + (select l.Locid from Location_tbl l) 
 + '  ) d pivot ( count(Vtype)     for Vtype in (' + @cols + ')  ) p '
execute(@query)
end

このクエリを実行すると、次のエラーが発生します。

パラメータ '@locid' が必要ですが、これは指定されていません。ロケーション テーブルからすべての locid を取得したい

4

2 に答える 2

0

これを試してみてください -

ALTER PROCEDURE [dbo].[ParkingDeatailsReportnew] 

    @locid INTEGER, 
    @startdate NVARCHAR(100), 
    @enddate NVARCHAR(100)

AS BEGIN

    DECLARE
          @cols AS NVARCHAR(MAX)
        , @query AS NVARCHAR(MAX)

    SELECT @cols = STUFF((
        SELECT DISTINCT ',' + QUOTENAME(Vtype)
        FROM dbo.VType_tbl
        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')

    SET @query = '
    SELECT Date, ' + @cols + '  
    from  ( 
        select v.Vtype, convert(date, dtime) as Date 
        from Transaction_tbl t 
        join VType_tbl v on t.vtid = v.vtid  
        where dtime between ''' + @startdate + ''' 
            and ''' + @enddate + '''
            and locid =  ' + CAST(@locid AS VARCHAR(10)) +
    '  ) d pivot ( count(Vtype) for Vtype in (' + @cols + ')  ) p '

    EXEC sys.sp_executesql @query
END
于 2013-08-05T05:34:39.310 に答える