2013-08-07 21 views
-5

我有一個存儲過程是這樣的:不明確的列名錯誤得到在執行存儲過程

ALTER PROCEDURE [dbo].[ParkingDeatailsReportcheck] 
    @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 LocName,Date, ' + @cols 
      + ' from (select l.LocName, v.Vtype, convert(date, dtime) as Date from Transaction_tbl t inner join VType_tbl v on t.vtid = v.vtid 
join Location_tbl l on t.locid=l.Locid  where locid=' 
      + CAST(@locid AS VARCHAR(MAX)) + ' and dtime between ''' 
      + @startdate + ''' and ''' + @enddate + ''' ) d pivot (  
       count(Vtype) 
       for Vtype in (' + @cols + ') ) p ' 
     EXECUTE(@query) 
    END 

在執行該存儲過程得到錯誤是這樣的:不明確的列名「LOCID」。 我這樣的預期輸出:

locationname Date  Emaar Staff Lost Ticket Normal  VIP   VVIP 
       ---------- ----------- ----------- ----------- ----------- ----------- 
Fashion   2013-05-08  1   0   2   0   1 
Fashion   2013-05-25  0   0   1   1   0 
Fashion  2013-05-27  0   0   17   2   1 

回答

4

你有

join Location_tbl l on t.locid=l.Locid  where locid=' 

變化

join Location_tbl l on t.locid=l.Locid  where l.locid=' 

你所需要的表的別名,它在其中後的動態SQL。

+0

insted的LOCID的我給l.locid ..now我的問題解決了 – user2648161

+1

我有格式化你的代碼,所以接受格式:) – christiandev

1

嘗試改變:

where locid=' 

到:

where t.locid=' 

全面查詢:

ALTER PROCEDURE [dbo].[ParkingDeatailsReportcheck] 

@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 LocName,Date, ' + @cols + ' 
    from ( 
     select l.LocName, v.Vtype, convert(date, dtime) as Date 
     from Transaction_tbl t 
     inner join VType_tbl v on t.vtid = v.vtid 
     join Location_tbl l on t.locid=l.Locid 
     where t.locid=' + CAST(@locid AS VARCHAR(MAX)) + ' 
      and dtime between ''' + @startdate + ''' and ''' + @enddate + ''' 
    ) d 
    pivot (
     count(Vtype) for Vtype in (' + @cols + ') 
    ) p ' 

    EXECUTE (@query) 
END