在 SSIS 数据源 T-SQL 中使用 WHERE ValX> ValY 时,结果包括 ValX = ValY 的列

When using WHERE ValX> ValY in SSIS Data Source T-SQL , the result includes columns where ValX = ValY

我在使用 SSIS 时遇到了一个非常奇怪的问题(我也尝试过在 SQL Server Management Studio 中编写查询并得到相同的结果)。

我有一个查询应该显示某个值比上次增加的行。为此,我有 2 个表 - 旧表和新表,它们(如果我简化的话)包含 ID 和 Value(以及其他一些对这种情况不重要的列)。我加入 ID 上的那 2 个表并比较旧值和新值。两列(旧列和新列)都是浮动的(SSIS 将它们视为 DT_R8)。

让我向您展示查询的外观。

SELECT n.ID, n.Val, o.Val
FROM New as n INNER JOIN Old as o ON n.ID = o.ID
WHERE n.Val > o.Val

两个表中都有数千条记录,几乎所有记录都经过此查询,结果正确,但所有这些记录中有 3 条错误地出现在结果集中。这 3 个 Old.Val 和 New.Val 相等(值为:4803.2、1336.44、2883.25),但尽管它们不满足条件,但它们无论如何都会出现在结果集中。我还要补充一点,这 3 个并不是集合中唯一带有小数位数字的记录,还有更多,所有这些都工作得很好。

我尝试了几次转换,但没有任何改变。

我也尝试了几种方法来从这些表中导出数据,只是为了看看值是否真的彼此不同,我以任何方式这样做,这 6 个(3 种情况中的每一种 2 对)数字总是显得平等。无论我如何导出数据,都没有出现小数点后第二位space。

有没有人经历过类似的事情?如果有任何建议,我将不胜感激。

尝试 cast 将比较表达式中的值浮点为十进制。

请在 WHERE 子句中将两列转换为通用数据类型并进行检查。 样本 WHERE CAST(n.Val AS MONEY) > CAST(o.Val AS MONEY)