Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存储过程正在将变量设置为错误行中的值_Sql_Sql Server_Stored Procedures_Sql Server 2012 - Fatal编程技术网

Sql 存储过程正在将变量设置为错误行中的值

Sql 存储过程正在将变量设置为错误行中的值,sql,sql-server,stored-procedures,sql-server-2012,Sql,Sql Server,Stored Procedures,Sql Server 2012,我正在编写一个存储过程来查询特定的表。不过我看到的行为真的很奇怪。首先,让我布局我的表设计和一些示例查询,以便更容易解释: 表格结构: 特定预订ID的所有行(仅1行) 请注意字段名列的值,这在下面很重要 正在调用的存储过程(和结果): 基本上,此存储过程返回指定的价格(航班价格、酒店价格、航班加价、酒店加价等)和指定的货币。所有值都插入到保留\u CurrencyPrices表中,因此它们只计算一次,不会再次计算(出于性能原因) 调试时,我可以看到一个问题,但我不明白为什么会发生这种情况:

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

表格结构:

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

请注意字段名列的值,这在下面很重要

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

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

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

请注意,@Result变量的值位于“局部变量”窗口中。这不应该是。。。这是没有意义的,因为此时尚未插入'TotalMarkupPrice'记录的任何值,实际上@Result变量的值被设置为'TotalPrice'记录中的价格。。您可以在上面的一个图像中看到,它是表中唯一的一行。因此,即使我已经指定了
其中[FieldName]=@FieldName
条件,并且
@FieldName
的值是'TotalMarkupPrice',它还是返回了'TotalPrice'行中的值。这毫无意义。我错过了什么

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


为什么,@Result被设置为错误的值?在存储过程中,WHERE子句似乎没有得到遵守。

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

WHERE [FieldName] = FieldName
,而不是你所想的:

WHERE [FieldName] = @FieldName
实际上,您没有使用
@FieldName
参数

同样的问题在下面一行:

AND [ToCurrency] = ToCurrency

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

@ParamFieldName
@ParamToCurrency

请显示完整的存储过程usp\u仪表板\u GetBookingPriceForCurrency?屏幕截图没有显示IF(@Result为NULL)之后的下半部分…非常好地发现了。漫长的一天过后,有时一个人只需要一双新鲜的眼睛。谢谢你,弗拉基米尔。