1

経由でストアド プロシージャを実行すると、 経由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>

結果はまったく異なります。近くにもありません。私はこれについて数時間頭を悩ませてきましたが、なぜそれが何をしているのか理解できません。

アップデート

ストアド プロシージャは大規模です (そして私が継承したものです)

4

2 に答える 2

12

(コメントより)

オプションのパラメータがあるようです。したがって、あなたのcfstoredproc呼び出しは、あなたが思っている値を渡していない可能性があります。順序に基づいて、実際には次の値を渡しているように見えます@CityZipID, @Sic, @lastRank。Danが述べたように(そして私がほのめかしたように)、cfstoredprocはパラメーターに位置表記を使用します(@dbVarNameは非推奨です)。すべてのパラメーター値を正しい順序で指定する必要があります。

アップデート:

FWIW、シェルプロシージャを作成すると、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)
于 2013-01-24T18:44:09.387 に答える
0

これを SQL サーバーで直接実行すると、いくつの結果が返されますか? 動作の違いを説明できる複数の結果が返される可能性があります。

于 2013-01-24T19:08:32.797 に答える