2013-06-22 34 views
-3
alter procedure [dbo].[ParkingDeatailsReport] 
    @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 = ' + CAST(@locid as varchar(max)) 
+ ' ) d pivot (count(Vtype)  for Vtype in (' + @cols + ') ) p ' 
execute(@query) 
end 

我試圖執行這樣的:存儲過程傳遞日期參數得到錯誤

EXEC ParkingDeatailsReport 5, '2013-01-01 00:00:00','2013年6月18日23: 59:59'

但是,我收到一個錯誤:必須聲明標量變量「@startdate」。

+0

可能重複[在執行與日收到錯誤的存儲過程(http://stackoverflow.com/questions/17245230/while-executing-stored-procedure-with-日期獲得錯誤) –

+4

提示:如果問題已關閉,請勿在沒有明顯變化的情況下重新發布。關閉意味着你的問題,正如你目前所要求的,不適合這個網站。通常,這意味着你需要花費更多的精力來解釋你正在做什麼,或者你沒有提供任何證據表明你已經進行了任何研究 –

+0

先生,,,我嘗試,還是錯誤 – user2510547

回答

1

的問題是,你正在建設中的PROC SQL,但你不使用@startdate和@EndDate值,而是要傳遞的字符串

你需要抓住這些變量時的值你建立字符串 - 是這樣的:

ALTER PROCEDURE [dbo].[ParkingDeatailsReport] 
    @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 = ' + CAST(@locid as varchar(max)) + ' 
       ) d 
       PIVOT (count(Vtype)  
       FOR Vtype in (' + @cols + ') ) p ' 

    EXECUTE(@query) 
END 
+0

Thnaks先生,,,這個存儲procdure爲我工作,,,,非常感謝你,,,, – user2510547