在 SSIS 数据源 T-SQL 中使用 WHERE ValX> ValY 时,结果包括 ValX = ValY 的列
Posted
技术标签:
【中文标题】在 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 【发布时间】:2016-08-14 07:07:16 【问题描述】:我在使用 SSIS 时遇到了一个非常奇怪的问题(我也尝试过,只是通过在 SQL Server Management Studio 中编写查询,得到了相同的结果)。
我有一个查询应该显示某个值比上次增加的行。为此,我有 2 个表 - 旧表和新表,它们(如果我简单的话)包含 ID 和值(以及其他一些对这种情况不重要的列)。我在 ID 上加入这两个表并比较旧值和新值。两列(旧的和新的)都是浮动的(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 对)数字总是出现平等。无论我如何导出数据,第二个小数点后都不会出现任何内容。
有没有人经历过类似的事情?我会非常感谢任何形式的建议。
【问题讨论】:
请在 WHERE 子句中将两列都转换为通用数据类型并进行检查。 (示例 WHERE CAST(n.Val AS MONEY) > CAST(o.Val AS MONEY)) 哇,解决了这个问题!谢谢! 【参考方案1】:请在 WHERE 子句中将两列都转换为通用数据类型并进行检查。
示例WHERE CAST(n.Val AS MONEY) > CAST(o.Val AS MONEY)
【讨论】:
像魅力一样工作!我可以问一下这是如何工作的吗?数字似乎仍然相同(视觉上),但现在比较可以正常工作。 @J.Kay,这可能对你有帮助,***.com/questions/8839460/…【参考方案2】:尝试在比较表达式中将cast
浮点值转换为小数。
【讨论】:
以上是关于在 SSIS 数据源 T-SQL 中使用 WHERE ValX> ValY 时,结果包括 ValX = ValY 的列的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SSIS 控制流任务中创建一个临时表,然后在数据流任务中使用它?