使用存储数据到查询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 JOIN
FROM TAXTRANS
,但我有一个存储在第一查询TAXTRANS
。如何用第一个查询数据替换第二个查询?
数据流:
答
什么是需要将查询和合并它时,它可以在一组办?如果您仍然希望以单独的批处理为基础查询,我建议首先将您想要重新使用的查询插入临时表(#表)中。使用该临时表左键连接其他查询。把它封装在一个存储过程中,然后获取数据。要进一步提高性能,请检查是否可以合并索引。
合并加入与排序是一个非常昂贵的转换,它吃性能。此外,你正在寻求的是T-SQL的改进和SSIS转换不是替代品
我这样做是因为第二个查询不是我唯一的查询,我应该做另一个查询像10,所有查询使用TAXTRANS信息 – Ledwing
如果您需要运行的其他10个查询都在同一个数据库中,那么我上面列出的内容仍然适用。以一步一步的方式模块化您的查询,并将其作为数据库本身的一批语句运行。通过合并将SSIS的连接逻辑引入SSIS将无济于事。 – VKarthik
将您的查询分成可重用的部分并将其分配给变量。在执行sql任务之前,在表达式任务内部构建每个语句。 –