2017-07-03 28 views
2

在我的項目中,我有一個合併連接轉換,它使用內部連接。它應該將文件查找與其餘的數據流結合起來。然而,聯合似乎不包括一些行,包括文件,即使它應該?我試圖模擬tsql中的連接,但我似乎做錯了,因爲它顯示我缺少的行。SSIS合併連接缺少行(以及如何模擬與tsql查詢的SSIS連接)

下面是我想加盟 輸入A輸出:

SELECT * 
FROM 
tblExpense expense 
OUTER APPLY(
    SELECT TOP 1 * 
    FROM tblExpenseDtl Details 
    WHERE expense.intExpenseID = Details.intExpenseID 
    ORDER BY Details.sintLineNo 
) details 
WHERE 
expense.dtUpdateDateTime > '2017-06-01' 
ORDER BY expense.intExpenseID desc 

輸入B:

SELECT f.* 
FROM dbo.tblExpense e 
JOIN tblExpenseDtl d ON d.intExpenseID = e.intExpenseID 
JOIN tblExpReceiptFile f ON f.intExpenseDtlID = d.intExpenseDtlID 
WHERE 
e.dtUpdateDateTime > '2017-06-01' 
ORDER BY e.intExpenseID desc 

而且,我認爲會產生相同的結果,我的SSIS SQL查詢內部連接

SELECT * 
FROM 
tblExpense expense 
OUTER APPLY(
    SELECT TOP 1 * 
    FROM tblExpenseDtl Details 
    WHERE expense.intExpenseID = Details.intExpenseID 
    ORDER BY Details.sintLineNo 
) details 
inner join (SELECT f.* 
    FROM dbo.tblExpense e 
    JOIN tblExpenseDtl d ON d.intExpenseID = e.intExpenseID 
    JOIN tblExpReceiptFile f ON f.intExpenseDtlID = d.intExpenseDtlID 
    WHERE 
    e.dtUpdateDateTime > '2017-06-01' 
    ORDER BY e.intExpenseID desc 
) innerJ 
WHERE 
expense.dtUpdateDateTime > '2017-06-01' 
ORDER BY expense.intExpenseID desc 

SSIS中的連接鍵是expense.intExpenseID = e.intExpenseID

輸入A給出了1行,用expenseID = X,和輸入B合併之前給出2行與expenseID = X

+0

爲什麼你要使用一個合併連接,當你可以用一個SQL命令做一個OLE DB源中的所有事情? – TheEsnSiavashi

回答

2

你如何排序數據?根據this SSIS排序方式與SQL Server不同(大多數情況下)。也許有問題。 編輯:intExpenseID是什麼類型?

+0

它們按intExpenseID排序,如名稱所示,它是一個int。區分大小寫不應該有任何問題 – Xyzk

+0

@Xyzk好的。你在哪裏排序數據? – Rokuto

+0

好吧,所以我根據msdn規範做了它,並通過在我的sql查詢中添加命令來排序(如上所述)。但是,無論出於何種原因,內部連接都不能正常使用這些類型。當我添加排序組件,正如您鏈接到的文章所建議的,它開始正常工作。我不知道爲什麼,當我整理整數,但謝謝 – Xyzk