下面的存儲過程起作用。但是,它不顯示SQL Reporting Services報告(SSRS報告)中的數據。SSRS報告不從存儲過程中提取數據
它必須是不顯示數據的臨時表。
如何獲取SSRS報告以提取數據?
原始存儲過程是當前存儲過程的上半部分。
我們修改了存儲過程,通過複製「頂部到底部」並向上半部分select語句的「where」子句添加代碼來說明以單詞「CUSTOM」或「SPECIAL」結尾的庫存料品號(ITEMNMBR) 」。
我們希望存儲過程的兩個部分都運行 - 循環或無循環 - 從某種意義上說,如果該項目是「CUSTOM」或「SPECIAL」,則運行存儲過程的上半部分。如果項目編號不是這些,則運行底部。
它類似於「if-then」語句。
起初,我嘗試在兩者之間插入一個「UNION ALL」子句。但是,SQL給了我一個語法錯誤,直到我刪除它。
請讓我知道您的想法。
謝謝!
約翰
ALTER procedure [dbo].[SRS_TransferBackOrdersToWareHouseBatch]
as
declare @sourceBatchRecordCount int
declare @destBatchRecordCount int
declare @destBatch varchar(30)
declare @sourceBatch varchar(30)
set @sourceBatch = 'BACKORDER'
set @destBatch = 'WAREHOUSE'
select @sourceBatchRecordCount = COUNT(*) from SOP10100 where bachnumb = @sourceBatch
select @destBatchRecordCount = COUNT(*) from SOP10100 where BACHNUMB = @sourceBatch and SOPNUMBE in (select SOPNUMBE from SOP10200 where
(ITEMNMBR LIKE '%CUSTOM' AND
ATYALLOC > 0) OR (ITEMNMBR LIKE '%SPECIAL' AND
ATYALLOC > 0))
select sopnumbe into #movedBO from SOP10100 where BACHNUMB = @sourceBatch and SOPNUMBE in (select SOPNUMBE from SOP10200 where
(ITEMNMBR LIKE '%CUSTOM' AND
ATYALLOC > 0) OR (ITEMNMBR LIKE '%SPECIAL' AND
ATYALLOC > 0))
--print @sourceBatchRecordCount
--print @destBatchRecordCount
if @destBatchRecordCount > 0
begin
declare @p30 int
set @p30=0
declare @p31 varchar(255)
set @p31=''
exec taCreateUpdateBatchHeaderRcd @[email protected],@I_vBCHCOMNT=default,@I_vSERIES=3,@I_vGLPOSTDT=default,@I_vBCHSOURC='Sales Entry ',
@I_vDOCAMT=0,@I_vORIGIN=1,@I_vNUMOFTRX=0,@I_vCHEKBKID=default,@I_vCNTRLTOT=default,@I_vCNTRLTRX=default,@I_vPOSTTOGL=0,@I_vPmtMethod=default,
@I_vEFTFileFormat=default,@I_vRequesterTrx=default,@I_vBRKDNALL=default,@I_vUSERID=default,@I_vBACHFREQ=default,@I_vRECPSTGS=default,
@I_vMSCBDINC=default,@I_vAPPROVL=default,@I_vAPPRVLDT=default,@I_vAPRVLUSERID=default,@I_vTRXSOURC=default,@I_vUSRDEFND1=default,
@I_vUSRDEFND2=default,@I_vUSRDEFND3=default,@I_vUSRDEFND4=default,@I_vUSRDEFND5=default,@[email protected] output,@[email protected] output
--EMOIS 9/2/2105 Change update to single update statement for each row, this will cause trigger to fire correctly
DECLARE @sopNumber CHAR(21)
DECLARE updateSOP CURSOR FOR
SELECT RTRIM(SOPNUMBE) FROM SOP10100 WHERE BACHNUMB = @sourceBatch and SOPNUMBE in (select SOPNUMBE from SOP10200 where
(ITEMNMBR LIKE '%CUSTOM' AND
ATYALLOC > 0) OR (ITEMNMBR LIKE '%SPECIAL' AND
ATYALLOC > 0))
OPEN updateSOP FETCH NEXT FROM updateSOP INTO @sopNumber
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE SOP10100
SET BACHNUMB = @destBatch --ReqShipDate = CONVERT(date, getDate()) Removed to keep original ReqShipDate
FROM SOP10100 WHERE SOPNUMBE = @sopNumber
FETCH NEXT FROM updateSOP INTO @sopNumber
END
CLOSE updateSOP DEALLOCATE updateSOP
select rtrim(sopnumbe) as 'BackOrderNo' from #movedBO
-- reconcile batch headers
set nocount on
DECLARE @bachnumb char(25)
, @numtrx int
, @batchamount numeric(19,5)
DECLARE c_sop CURSOR FOR
SELECT rtrim(BACHNUMB) FROM SY00500 WHERE (SERIES = 3) AND (BCHSOURC = 'Sales Entry') order by 1
OPEN c_sop FETCH NEXT FROM c_sop INTO @bachnumb
WHILE @@FETCH_STATUS = 0
BEGIN SELECT @numtrx = ISNULL(COUNT(SOPNUMBE),0)
, @batchamount = ISNULL(SUM(DOCAMNT),0)
FROM SOP10100 WHERE BACHNUMB = @bachnumb
UPDATE SY00500 SET NUMOFTRX = @numtrx, BCHTOTAL = @batchamount WHERE BACHNUMB = @bachnumb
--Print rtrim(@bachnumb) +' ,Transactions = '+COnvert(varchar(100),@numtrx) +' ,BatchTotal = '+COnvert(varchar(100),@batchamount)
FETCH NEXT FROM c_sop INTO @bachnumb
END
CLOSE c_sop DEALLOCATE c_sop
end
else
select 'No documents.' as 'BackOrderNo'
--declare @sourceBatchRecordCount int
--declare @destBatchRecordCount int
--declare @destBatch varchar(30)
--declare @sourceBatch varchar(30)
--set @sourceBatch = 'BACKORDER'
--set @destBatch = 'WAREHOUSE'
select @sourceBatchRecordCount = COUNT(*) from SOP10100 where bachnumb = @sourceBatch
select @destBatchRecordCount = COUNT(*) from SOP10100 where BACHNUMB = @sourceBatch and SOPNUMBE in (select SOPNUMBE from SOP10200 where
ATYALLOC > 0)
select sopnumbe into #movedBO2 from SOP10100 where BACHNUMB = @sourceBatch and SOPNUMBE in (select SOPNUMBE from SOP10200 where
ATYALLOC > 0)
--print @sourceBatchRecordCount
--print @destBatchRecordCount
if @destBatchRecordCount > 0
begin
set @p30=0
set @p31=''
exec taCreateUpdateBatchHeaderRcd @[email protected],@I_vBCHCOMNT=default,@I_vSERIES=3,@I_vGLPOSTDT=default,@I_vBCHSOURC='Sales Entry ',
@I_vDOCAMT=0,@I_vORIGIN=1,@I_vNUMOFTRX=0,@I_vCHEKBKID=default,@I_vCNTRLTOT=default,@I_vCNTRLTRX=default,@I_vPOSTTOGL=0,@I_vPmtMethod=default,
@I_vEFTFileFormat=default,@I_vRequesterTrx=default,@I_vBRKDNALL=default,@I_vUSERID=default,@I_vBACHFREQ=default,@I_vRECPSTGS=default,
@I_vMSCBDINC=default,@I_vAPPROVL=default,@I_vAPPRVLDT=default,@I_vAPRVLUSERID=default,@I_vTRXSOURC=default,@I_vUSRDEFND1=default,
@I_vUSRDEFND2=default,@I_vUSRDEFND3=default,@I_vUSRDEFND4=default,@I_vUSRDEFND5=default,@[email protected] output,@[email protected] output
--EMOIS 9/2/2105 Change update to single update statement for each row, this will cause trigger to fire correctly
DECLARE updateSOP CURSOR FOR
SELECT RTRIM(SOPNUMBE) FROM SOP10100 WHERE BACHNUMB = @sourceBatch and SOPNUMBE in (select SOPNUMBE from SOP10200 where
ATYALLOC > 0)
OPEN updateSOP FETCH NEXT FROM updateSOP INTO @sopNumber
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE SOP10100
SET BACHNUMB = @destBatch, ReqShipDate = getDate() --Removed to keep original ReqShipDate
FROM SOP10100 WHERE SOPNUMBE = @sopNumber
--UPDATE SOP10100 SET ReqShipDate = CONVERT(date, getDate())
-- FROM SOP10100 WHERE SOPNUMBE = @sopNumber
FETCH NEXT FROM updateSOP INTO @sopNumber
END
CLOSE updateSOP DEALLOCATE updateSOP
select rtrim(sopnumbe) as 'BackOrderNo' from #movedBO
-- reconcile batch headers
set nocount on
DECLARE c_sop CURSOR FOR
SELECT rtrim(BACHNUMB) FROM SY00500 WHERE (SERIES = 3) AND (BCHSOURC = 'Sales Entry') order by 1
OPEN c_sop FETCH NEXT FROM c_sop INTO @bachnumb
WHILE @@FETCH_STATUS = 0
BEGIN SELECT @numtrx = ISNULL(COUNT(SOPNUMBE),0)
, @batchamount = ISNULL(SUM(DOCAMNT),0)
FROM SOP10100 WHERE BACHNUMB = @bachnumb
UPDATE SY00500 SET NUMOFTRX = @numtrx, BCHTOTAL = @batchamount WHERE BACHNUMB = @bachnumb
--Print rtrim(@bachnumb) +' ,Transactions = '+COnvert(varchar(100),@numtrx) +' ,BatchTotal = '+COnvert(varchar(100),@batchamount)
FETCH NEXT FROM c_sop INTO @bachnumb
END
CLOSE c_sop DEALLOCATE c_sop
end
else
select 'No documents.' as 'BackOrderNo'
謝謝你的快速回應,理查茲先生!你提到我不會從#movedBO2中選擇,「稍後」。我的確在以下語句中:從#movedBO2中選擇rtrim(sopnumbe)作爲'BackOrderNo'。你能否澄清你的意思? :) –
嗨理查茲先生:你說得對!我認爲,當我第一次將代碼「粘貼」到這篇文章中時,我很難過,並且意外地切斷了最後幾行。非常感謝,我對此感到抱歉!我希望明天能嘗試你的步驟。我會讓你知道它是怎麼回事。 :)約翰 –
你好:我得到的代碼工作。但是,這份報告並沒有顯示兩件「碎片」。我使用了上面的兩個IIF語句。有任何想法嗎?約翰 –