2013-01-24 95 views
1

当我通过cfstoredproc执行存储过程时,我得到的结果与通过cfquery调用存储过程的结果不同。我将相同的参数值传递给每个调用。另外,当我在SQL Studio中运行存储过程时,我会得到正确的结果(与cfquery相同)。与cfstoredproc和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> 

的结果是完全不同的。它不甚密切。我已经在这几个小时内对这个问题感到ban and不安,但我无法弄清楚它为什么在做它正在做的事情。

UPDATE

的存储过程是巨大的(另外一个是我继承),所以我不打算给它的所有粘贴在这里:http://pastebin.com/EtufPWXf

+1

请包括存储的过程。与每次通话的结果一起。 –

+1

请发布实际存储过程的主体/源。 –

+1

程序是否有任何可选参数? – Leigh

回答

12

(从评论)

看起来它有可选的参数。所以你的cfstoredproc调用可能不会传递你认为它的值。根据订单,它看起来实际上正在传入以下值:@CityZipID, @Sic, @lastRank。正如丹提到的(我暗示),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) 
0

如果在SQL Server上运行此直接多少结果它返回?您可能会返回多个可以解释行为差异的结果。