【问题标题】:SSIS merge join lacks row (and also How to simulate SSIS join with tsql query)SSIS 合并连接缺少行(以及如何使用 tsql 查询模拟 SSIS 连接)
【发布时间】:2017-07-03 09:35:24
【问题描述】:

在我的项目中,我有一个使用内连接的合并连接转换。它应该将文件查找与数据流的其余部分结合起来。但是,连接似乎不包括某些行和文件,即使它应该?我正在尝试模拟 tsql 中的连接,但我似乎做错了,因为它显示了丢失的行。

这是我尝试加入的输出 输入 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 行,费用 ID=X,输入 B 给出 2 行,费用 ID=X

【问题讨论】:

  • 当您可以使用 SQL 命令在 OLE DB 源中执行所有操作时,为什么还要使用合并连接?

标签: sql-server ssis


【解决方案1】:

在合并之前如何对数据进行排序?根据this SSIS 的排序方式与 SQL Server 不同(在大多数情况下)。也许有问题。 编辑:intExpenseID 是什么类型?

【讨论】:

  • 它们按 intExpenseID 排序,顾名思义,它是一个 int。区分大小写应该没有任何问题
  • @Xyzk 好的。您在哪里对数据进行排序?
  • 好的,所以我按照msdn规范做了,并通过在我的sql查询中添加order by进行排序(如上所述)。但是,无论出于何种原因,内部连接都无法与这些类型一起正常工作。当我按照您链接到的文章的建议添加排序组件时,它开始正常工作。我不知道为什么,当我对整数进行排序时,但谢谢
  • @Xyzk 很好,但这很奇怪。你能检查两个 Id 列的元数据吗?也许一个是四字节整数,另一个是八字节?
猜你喜欢
  • 2019-03-02
  • 2022-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多