2013-08-04 14 views
0

我有這樣一個存儲過程:不能夠採取特定的ID從自動從另一個表

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 

在執行此查詢我得到以下錯誤:

expects parameter '@locid', which was not supplied.i want to take all locid from my location table

+1

請檢查你的標題這是沒有意義的。 –

回答

0

您的存儲過程無法因爲您期望得到參數@locid@StartDate@EndDate

EXEC ParkingDeatailsReportnew 
    @logid = [yourvalue], @StartDate = '[somedate]', @enddate = 'someEndDate' 

例如:

EXEC ParkingDeatailsReportnew 
    @logid = 1234, @StartDate = '2013/08/04 08:01:00 ', @enddate = '2013/08/04 11:21:00' 

你解決這個之後,開始解決其他問題

---編輯----

,所以你需要從參數中刪除。

ALTER procedure [dbo].[ParkingDeatailsReportnew] 
    @startdate nvarchar(100),@enddate nvarchar(100) 

爲什麼你在第一個地方呢?
我懷疑它的工作在所有execute需要VARCHAR,當您使用NVARCHAR

我也認爲你有你的邏輯其他錯誤你有使用sp_executesql,但後來你會到達那裏。

+0

我不想通過locid ,,我想從位置表 – user2648161

+0

@ user2648161自動獲取本地請看我編輯的回覆 –

+0

先生我給了這樣,我通過我的locid這樣:locid IN'+(select l.Locid from Location_tbl l)但現在出現錯誤:子查詢返回的值超過1。當子查詢遵循=,!=,<, <= , >,> =或當子查詢用作表達式時,這是不允許的。 – user2648161

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 
相關問題