1

パラメータ化されたクエリを使用して、検索ボックスから取得した特定の単語を検索していますが、特定の単語が問題を引き起こしています。これらの1つは、「パッド」という単語です。

これは私が使用しているレシピデータベースで、「パッタイ」と呼ばれるレシピが含まれています。「thai」という単語をクエリパラメータに渡すと、そのレシピは正常に返されます。「パッド」という単語を渡すと、クエリは約10秒間実行され、レコードは返されません。

「pad」が予約キーワードであることに疑いを持っていたので、他のキーワードを試してきました。これまでに同じ問題を引き起こしていることがわかったのは「proc」だけです。

問題が何であるか、そしてもっと重要なことに、私がそれをどのように回避できるかについてのアイデア。

4

1 に答える 1

0

コードがどのように機能するかについて詳細を提供していないので、「パラメーター化されたクエリ」とはストアドプロシージャを意味し、ストアドプロシージャをテキスト全体で呼び出すというワイルドな推測を行います(最善ではありません練習しますが、使用しているソフトウェアの制限が何であるかはわかりません)。

とにかく、理由padまたはproc問題を引き起こす可能性があるのは、これらが文字列であることをサーバーに明示的に伝えていないためです。私が真に理解したことがない理由により、TSQL では、1 単語の文字列をプロシージャの (n)varchar パラメータに渡すことができます。簡単な例は次のとおりです。

EXEC sp_helpdb master

厳密に言えば、これは構文エラーになるはずです。正しい構文は次のとおりです。

EXEC sp_helpdb 'master'

しかし、開発者は「タイピングが減り、生産性が向上します!」と考えたようです。したがって、クエリは機能します。

プロシージャが次のように呼び出された場合:

EXEC p_find_recipe thai

これにより文字列「thai」が渡され、すべてが期待どおりに実行されます。procただし、 orfileやetc... などの予約語を使用するtableと構文エラーが発生するため、値を引用符で囲んで機能させる必要があります。

つまり、構文エラーはすぐに返され、10秒もかからないはずです-私の知る限り、「パッド」は予約キーワードではありません

したがって、上記があなたの問題に当てはまるかどうかはわかりません。したがって、何も入力せずに10分間入力しただけである可能性は十分にあります=)

SELECT * FROM table WHERE field = ?とにかく、おそらく、使用している言語、パラメーター化されたクエリの意味(後で?が埋められる構文を意味するのでしょうか?)、できればサンプルコードを使用して、追加の入力を行う必要があります。

于 2011-12-23T09:59:25.877 に答える