存储过程是将变量设置为错误行的值

时间:2016-10-04 06:13:12

标签: sql sql-server stored-procedures sql-server-2012

我正在编写一个存储过程来查询特定的表。我看到的行为真的很奇怪。首先让我布置我的表格设计和一些示例查询,以便更容易解释:

表格结构:

enter image description here

特定预订ID(仅1行)的所有行

enter image description here

请注意 FieldName 列的值,这在下面非常重要。

调用存储过程(和结果):

enter image description here

基本上,此存储过程返回指定的价格(航班价格,酒店价格,航班加价,酒店标记等等)和指定的货币。所有值都插入到 Reservations_CurrencyPrices 表中,因此它们只计算一次而不是再次计算(出于性能原因)。

调试时,我可以看到问题,但我不明白为什么会发生这种情况:

enter image description here

请注意 @Result 变量的值位于“局部”窗口中。这不应该......没有意义,因为此时'TotalMarkupPrice'记录的任何值都没有被插入,实际上 @Result 变量的值正在设置为'TotalPrice'记录的价格..您可以在上面的一张图片中看到它,这是表格中唯一的一行。因此,即使我已指定WHERE [FieldName] = @FieldName条件且@FieldName的值为'TotalMarkupPrice',它也会返回'TotalPrice行中的值'代替。这毫无意义。我在这里缺少什么?

我手动运行该查询以查看结果是什么,它正确返回NULL,如下所示:

enter image description here

为什么,为什么 @Result 被设置为错误的值?看来,在sproc里面没有兑现WHERE子句。

1 个答案:

答案 0 :(得分:2)

在您的屏幕截图中,您的代码是:

WHERE [FieldName] = FieldName

,不是你的想法:

WHERE [FieldName] = @FieldName

实际上,您没有使用@FieldName参数。

下面一行同样的问题:

AND [ToCurrency] = ToCurrency

由于很容易遗漏一个@符号,我更喜欢命名这样的参数:

@ParamFieldName
@ParamToCurrency