我正在编写一个存储过程来查询特定的表。我看到的行为真的很奇怪。首先让我布置我的表格设计和一些示例查询,以便更容易解释:
表格结构:
特定预订ID(仅1行)的所有行
请注意 FieldName 列的值,这在下面非常重要。
调用存储过程(和结果):
基本上,此存储过程返回指定的价格(航班价格,酒店价格,航班加价,酒店标记等等)和指定的货币。所有值都插入到 Reservations_CurrencyPrices 表中,因此它们只计算一次而不是再次计算(出于性能原因)。
调试时,我可以看到问题,但我不明白为什么会发生这种情况:
请注意 @Result 变量的值位于“局部”窗口中。这不应该......没有意义,因为此时'TotalMarkupPrice'记录的任何值都没有被插入,实际上 @Result 变量的值正在设置为'TotalPrice'记录的价格..您可以在上面的一张图片中看到它,这是表格中唯一的一行。因此,即使我已指定WHERE [FieldName] = @FieldName
条件且@FieldName
的值为'TotalMarkupPrice',它也会返回'TotalPrice行中的值'代替。这毫无意义。我在这里缺少什么?
我手动运行该查询以查看结果是什么,它正确返回NULL,如下所示:
为什么,为什么 @Result 被设置为错误的值?看来,在sproc里面没有兑现WHERE子句。
答案 0 :(得分:2)
在您的屏幕截图中,您的代码是:
WHERE [FieldName] = FieldName
,不是你的想法:
WHERE [FieldName] = @FieldName
实际上,您没有使用@FieldName
参数。
下面一行同样的问题:
AND [ToCurrency] = ToCurrency
由于很容易遗漏一个@
符号,我更喜欢命名这样的参数:
@ParamFieldName
@ParamToCurrency