当我通过cfstoredproc
执行存储过程时,我得到的结果与通过cfquery
调用存储过程的结果不同。我正在向每个调用传递相同的确切参数值。而且,当我在SQL Studio中运行存储过程时,我得到了正确的结果(与cfquery相同)。
以下是cfstoredproc
电话
<cfstoredproc datasource="#request.mainDSN#" debug="#request.debug#" procedure="rankingresults">
<cfprocparam type="in" value="8652" CFSQLType="CF_SQL_INTEGER">
<cfprocparam type="in" value="50" CFSQLType="CF_SQL_INTEGER">
<cfprocparam type="in" value="53" CFSQLType="CF_SQL_INTEGER">
<cfprocresult name="local.listing">
</cfstoredproc>
以下是cfquery
电话
<cfquery datasource="#request.mainDSN#" name="rankings">
EXEC rankingresults
@CityZipId = 8652,
@distance = 50,
@sic = 53
</cfquery>
结果完全不同。它甚至都不是很接近。我已经被我的头撞了好几个小时了,我无法弄清楚它为什么要这样做。
更新
存储过程很大(我继承了一个),所以我不打算将它全部粘贴在这里:http://pastebin.com/EtufPWXf
答案 0 :(得分:12)
(来自评论)
看起来它有可选参数。因此,您的cfstoredproc
来电可能无法传递您认为的值。根据订单,它看起来实际上是传递的值为@CityZipID, @Sic, @lastRank
。正如Dan所提到的(我暗示过),cfstoredproc使用位置表示法来表示参数(@dbVarName is deprecated)。您需要以正确的顺序提供所有参数值 。
<强>更新强>
FWIW,如果您创建一个shell过程,您会看到cfstoredproc和cfquery实际上是使用不同的参数/值调用该过程。 (见下文)。
如果您调用没有@Dan建议的命名参数(即exec rankingresults 8652, 50, 53
)的过程,您肯定会看到结果的差异。 (我知道你说“没有变化”,但你的测试可能只是一个错误。)
<强> CFSTOREDPROC 强>
@ATTRCODES|@CITYZIPID|@DISTANCE|@HASURL |@ISFEATURED |@LASTRANK|@PHOTOCOUNT|@REVIEWCOUNT |@SIC|@SICBUDGETIDS
(nothing)| 8652| (nothing)| (nothing)| (nothing)| 53| (nothing)| (nothing)| 50| (nothing)
<强> CFQUERY 强>
@ATTRCODES|@CITYZIPID|@DISTANCE|@HASURL |@ISFEATURED |@LASTRANK|@PHOTOCOUNT|@REVIEWCOUNT |@SIC|@SICBUDGETIDS
(nothing)| 8652| 50| (nothing)| (nothing)| 0| (nothing)| (nothing)| 53| (nothing)
答案 1 :(得分:0)
如果直接在sql server上运行它会返回多少结果?您可能会返回多个可以解释行为差异的结果。