1

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

ALTER procedure [dbo].[ParkingDeatailsReportnew] 
  @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 IN  ' + (select CAST(l.Locid  as varchar(max))  from Location_tbl l)
 + '  ) d pivot ( count(Vtype)     for Vtype in (' + @cols + ')  ) p '

   execute(@query)
end

これを実行すると、次のようなエラーが発生します。

サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。

サブクエリで複数の値を渡すにはどうすればよいですか?

4

2 に答える 2

2

あなたの問題はここにあると思います:

(select CAST(l.Locid  as varchar(max))  from Location_tbl l)

そこから返された不明な量の行から文字列を形成しようとしています。

文字列のその部分を作成するだけです。

于 2013-08-04T13:06:55.960 に答える