使用存储数据到查询SSIS

问题描述:

我有一个查询,我需要的数据,所以我将其存储到OLEDB连接,因为我想几次使用该数据到另一个querys使用存储数据到查询SSIS

查询

SELECT * FROM (
SELECT 
TT.VOUCHER, 
TT.TAXITEMGROUP, 
TT.TAXCODE, 
TT.SOURCEBASEAMOUNTCUR, 
TT.SOURCETAXAMOUNTCUR, 
TTGJAERIVA.TAXTRANSRELATIONSHIP, 
TTGJAERIVA.GENERALJOURNALACCOUNTENTRY, 
TTGJAERIVA.LEDGERDIMENSION, 
GJAERIVA.TEXT, 
GJAERIVA.LEDGERDIMENSION AS LEDGERDIMENSIONGAE, 
GJAERIVA.POSTINGTYPE 
FROM TAXTRANS TT 
INNER MERGE JOIN TAXTRANSGENERALJOURNALACCOUNTENTRY TTGJAERIVA ON TTGJAERIVA.TAXTRANS = TT.RECID 
INNER MERGE JOIN GENERALJOURNALACCOUNTENTRY GJAERIVA ON TTGJAERIVA.GENERALJOURNALACCOUNTENTRY = GJAERIVA.RECID 
AND GJAERIVA.POSTINGTYPE IN(14,236,71,41) 
AND TT.TRANSDATE <= '2015-04-30' 
WHERE 
(TT.TAXORIGIN <> 11 AND TT.TRANSDATE BETWEEN '2015-01-01' AND '2015-04-30') OR (TT.TAXORIGIN = 11 AND TT.TRANSDATE BETWEEN '2015-01-01' AND '2015-04-30')) AS T 

然后我创建另一个OLEDB连接在那里我有另一个查询,我使用的数据来自第一查询

第二个查询(仅限于相关的代码)

LEFT MERGE JOIN 
(SELECT TTRIVA.*,TTGJAERIVA.GENERALJOURNALACCOUNTENTRY FROM TAXTRANS TTRIVA 
INNER MERGE JOIN TAXTRANSGENERALJOURNALACCOUNTENTRY TTGJAERIVA ON TTGJAERIVA.TAXTRANS = TTRIVA.RECID 
INNER MERGE JOIN GENERALJOURNALACCOUNTENTRY GJAERIVA ON TTGJAERIVA.GENERALJOURNALACCOUNTENTRY = GJAERIVA.RECID 
AND GJAERIVA.POSTINGTYPE IN(14,236,71) AND TTRIVA.TRANSDATE <[email protected]) TTRIVA ON TT.VOUCHER = TTRIVA.VOUCHER 
AND TT.SOURCERECID = TTRIVA.SOURCERECID 
AND TT.TAXITEMGROUP = TTRIVA.TAXITEMGROUP 
AND (TTRIVA.TAXCODE LIKE 'RIVA%') 
AND TTRIVA.GENERALJOURNALACCOUNTENTRY = TTGJAE.GENERALJOURNALACCOUNTENTRY 


--JOIN PARA RETENCIONES DE ISR PAGADAS 
LEFT MERGE JOIN 
(SELECT TTRISR.*,TTGJAERIVA.GENERALJOURNALACCOUNTENTRY FROM TAXTRANS TTRISR 
INNER MERGE JOIN TAXTRANSGENERALJOURNALACCOUNTENTRY TTGJAERIVA ON TTGJAERIVA.TAXTRANS = TTRISR.RECID 
INNER MERGE JOIN GENERALJOURNALACCOUNTENTRY GJAERIVA ON TTGJAERIVA.GENERALJOURNALACCOUNTENTRY = GJAERIVA.RECID 
AND GJAERIVA.POSTINGTYPE IN(14,236,71) AND TTRISR.TRANSDATE <[email protected]) TTRISR ON TT.VOUCHER = TTRISR.VOUCHER AND TT.SOURCERECID = TTRISR.SOURCERECID 
AND TT.TAXITEMGROUP = TTRISR.TAXITEMGROUP 
AND (TTRISR.TAXCODE LIKE 'RISR%') 
AND TTRISR.GENERALJOURNALACCOUNTENTRY = TTGJAE.GENERALJOURNALACCOUNTENTRY 

--JOIN PARA IEPSCUOTA 
LEFT MERGE JOIN 
(SELECT TTIEPSCUOTA.*,TTGJAERIVA.GENERALJOURNALACCOUNTENTRY FROM TAXTRANS TTIEPSCUOTA 
INNER MERGE JOIN TAXTRANSGENERALJOURNALACCOUNTENTRY TTGJAERIVA ON TTGJAERIVA.TAXTRANS = TTIEPSCUOTA.RECID 
INNER MERGE JOIN GENERALJOURNALACCOUNTENTRY GJAERIVA ON TTGJAERIVA.GENERALJOURNALACCOUNTENTRY = GJAERIVA.RECID 
AND GJAERIVA.POSTINGTYPE IN(14,236,71) AND TTIEPSCUOTA.TRANSDATE <[email protected]) TTIEPSCUOTA ON TT.VOUCHER = TTIEPSCUOTA.VOUCHER AND TT.SOURCERECID = TTIEPSCUOTA.SOURCERECID 
AND TT.TAXITEMGROUP = TTIEPSCUOTA.TAXITEMGROUP 
AND (TTIEPSCUOTA.TAXCODE LIKE 'IEPSCUOTAP') 
AND TTIEPSCUOTA.GENERALJOURNALACCOUNTENTRY = TTGJAE.GENERALJOURNALACCOUNTENTRY 

正如你可以看到我用在每个LEFT JOINFROM TAXTRANS,但我有一个存储在第一查询TAXTRANS。如何用第一个查询数据替换第二个查询?

数据流:

enter image description here

什么是需要将查询和合并它时,它可以在一组办?如果您仍然希望以单独的批处理为基础查询,我建议首先将您想要重新使用的查询插入临时表(#表)中。使用该临时表左键连接其他查询。把它封装在一个存储过程中,然后获取数据。要进一步提高性能,请检查是否可以合并索引。

合并加入与排序是一个非常昂贵的转换,它吃性能。此外,你正在寻求的是T-SQL的改进和SSIS转换不是替代品

+0

我这样做是因为第二个查询不是我唯一的查询,我应该做另一个查询像10,所有查询使用TAXTRANS信息 – Ledwing

+0

如果您需要运行的其他10个查询都在同一个数据库中,那么我上面列出的内容仍然适用。以一步一步的方式模块化您的查询,并将其作为数据库本身的一批语句运行。通过合并将SSIS的连接逻辑引入SSIS将无济于事。 – VKarthik

+0

将您的查询分成可重用的部分并将其分配给变量。在执行sql任务之前,在表达式任务内部构建每个语句。 –