cfstoredproc和cfquery的结果不同

时间:2013-01-24 17:28:04

标签: tsql coldfusion coldfusion-8 cfquery cfstoredproc

当我通过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

2 个答案:

答案 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上运行它会返回多少结果?您可能会返回多个可以解释行为差异的结果。