簡體   English   中英

SQL代碼可在SSMS中工作,但不能在Report Builder 3.0中工作

[英]SQL Code working in SSMS but not in Report Builder 3.0

我有一個在SSMS中工作的代碼,但在Report Builder中不工作。 在第一部分中,我創建一個臨時表,在第二部分中,將該表(使用連接)附加到我的整個查詢中。 在SSMS中,我可以聲明兩次參數,並在創建臨時表后使用GO,但是RP Builder無法使用go。 您可以在下面找到代碼。

任何提示表示贊賞。 謝謝!

    IF OBJECT_ID('tempdb..#TempResTable') IS NOT NULL   DROP TABLE #TempResTable
IF OBJECT_ID('tempdb..#Temp123') IS NOT NULL   DROP TABLE #Temp123

declare @fromDate date
set @fromDate='2015-10-26'
declare @toDate date
set @toDate='2015-11-17'

    Create table #tempResTable (id_resource int, Mins int)
    while (@fromDate <= @toDate)
    begin 
    Insert into #TempResTable 
        select
        r.id_resource
        ,datediff(mi,coalesce(cw.from_time,convert(time, '12:00:00 AM')),coalesce(cw.till_time,convert(time , '23:59:59 PM')))  as 'MinutesAvailable'
        from calendar
        join resource r on r.id_calendar=calendar.id_calendar
        left join calendarVersion cv on cv.id_calendarVersion=calendar.id_calendar
        left join calendarweekdayentry cw on cw.id_calendarVersion=cv.id_calendarVersion  
        --where r.id_resource=@resource 
        where cw.id_availabilitykind in(2,8)
        and cw.weekday=(case when (datediff(dd,cv.from_date,@fromDate)+1)-((datediff(dd,cv.from_date,@fromDate)+1)/(nofweeks*7)*(nofweeks*7))=0 then nofweeks*7
                        else (datediff(dd,cv.from_date,@fromDate)+1)-((datediff(dd,cv.from_date,@fromDate)+1)/(nofweeks*7)*(nofweeks*7))
                        end)
        Group By r.id_resource
        ,cv.from_date
        ,cw.from_time
        ,cw.till_time,cw.id_availabilitykind
        --)  

        set @fromDate=dateadd(dd,1,@fromDate)
    end
go
declare @fromDate date
set @fromDate='2015-10-26'
declare @toDate date
set @toDate='2015-11-17'


select * into #temp123 from
(
select vwdepartment.departmentName 
 ,row_number() over (order by resource.ID_resource) as 'rowNumber'
,resource.resourceName
,resource.id_resource
,B.AvailabilityHours
--,vwplannedShift.id_shift
--,vwplannedShift.plannedstartinstant
--,vwplannedShift.plannedfinishinstant 
--,datediff(mi,vwplannedShift.plannedstartinstant,vwplannedShift.plannedfinishinstant)
, ( select  sum(distinct(datediff(mi,vwplannedShift.plannedstartinstant,vwplannedShift.plannedfinishinstant))) from resource r1 where r1.resourceName=resource.resourceName group by r1.resourceName   ) as 'MinsPlanned'
--,cw.from_time
--,cw.till_time
--,[dbo].[sp_ResourceAvailability]
from vwplannedShift
join vwshift on vwshift.id_shift = vwplannedShift.id_shift
and datediff(dd,@fromDate , vwplannedShift.plannedStartInstant) >=0
and datediff(dd,@toDate , vwplannedShift.plannedStartInstant) <=0
join vwdepartment on vwdepartment.id_department = vwplannedShift.id_department
join vwaction actions on coalesce(actions.t3_shift, actions.id_shift) = vwshift.id_shift 
join vwresourceCombinationDriver driver on actions.id_unionResourceCombi = driver.id_resourceCombination                        
join resource on driver.id_resource = resource.id_resource  
join resourceKind rk on rk.id_resourceKind=resource.id_resourceKind
join calendar c on c.id_calendar=resource.id_calendar
join calendarversion cv on cv.id_calendar=c.id_calendar
join calendarweekdayentry cw on cw.id_calendarVersion=cv.id_calendarVersion
left join availabilityKind ak on ak.id_availabilityKind=cw.id_availabilityKind and cw.id_availabilityKind in (2,8)
LEFT JOIN (select id_resource, sum(mins)AS AvailabilityHours from #tempResTable GROUP BY #tempResTable.id_resource) B ON B.ID_RESOURCE=RESOURCE.ID_RESOURCE
group by resource.resourcename,resource.id_resource,vwdepartment.departmentName,B.AvailabilityHours

union

select vwdepartment.departmentName 
 ,row_number() over (order by resource.ID_resource) as 'rowNumber'
 ,resource.resourceName
,resource.id_resource
,B.AvailabilityHours
--,vwplannedShift.id_shift
--,vwplannedShift.plannedstartinstant
--,vwplannedShift.plannedfinishinstant
--,datediff(mi,vwplannedShift.plannedstartinstant,vwplannedShift.plannedfinishinstant) 
,( select sum(distinct(datediff(mi,vwplannedShift.plannedstartinstant,vwplannedShift.plannedfinishinstant))) from resource r1 where r1.resourceName=resource.resourceName group by r1.resourceName    ) as 'MinsPlanned'
--,cw.from_time
--,cw.till_time
from vwplannedShift
join vwshift on vwshift.id_shift = vwplannedShift.id_shift
and datediff(dd,@fromdate , vwplannedShift.plannedStartInstant) >=0
and datediff(dd,@todate , vwplannedShift.plannedStartInstant) <=0
join vwdepartment on vwdepartment.id_department = vwplannedShift.id_department
join vwaction actions on coalesce(actions.t3_shift, actions.id_shift) = vwshift.id_shift 
join vwresourcecombinationtruck truck on actions.id_unionResourceCombi = truck.id_resourceCombination
join resource on truck.id_resource = resource.id_resource
join resourceKind rk on rk.id_resourceKind=resource.id_resourceKind
left join calendar c on c.id_calendar=resource.id_calendar
left join calendarversion cv on cv.id_calendar=c.id_calendar
left join calendarweekdayentry cw on cw.id_calendarVersion=cv.id_calendarVersion
left join availabilityKind ak on ak.id_availabilityKind=cw.id_availabilityKind and cw.id_availabilityKind in (2,8)
LEFT JOIN (select id_resource, sum(mins)AS AvailabilityHours from #tempResTable GROUP BY #tempResTable.id_resource) B ON B.ID_RESOURCE=RESOURCE.ID_RESOURCE
group by resource.resourcename,resource.id_resource,vwdepartment.departmentName,B.AvailabilityHours
) as cte


select* from #temp123

引用GO上文檔

GO不是Transact-SQL語句; 它是sqlcmd和osql實用程序以及SQL Server Management Studio代碼編輯器可以識別的命令。

因此未被報表生成器識別。

盡管TT已確定您的代碼存在問題,但解決方法是在數據庫中創建一個新的存儲過程,這將使您可以隨意創建,填充和查詢臨時表。

大概是這樣嗎?

CREATE PROCEDURE [dbo].[GetMyData] ( @startDate DATETIME, @endDate DATEIME )

    Create table #tempResTable (id_resource int, Mins int)
    ...
    (All the rest of your code (without the variable declarations and 'GOs')
    ...
    select* from #temp123
GO

GRANT EXECUTE ON [dbo].[GetMyData] TO [MyUser]
GO

然后,通過選擇“存儲過程”而不是“文本”,直接從您的數據集中引用它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM