ホームページ > データベース > mysql チュートリアル > SQL クエリで「変数名 '@' はすでに宣言されています」というエラーが表示されるのはなぜですか?

SQL クエリで「変数名 '@' はすでに宣言されています」というエラーが表示されるのはなぜですか?

Linda Hamilton
リリース: 2025-01-01 07:00:11
オリジナル
789 人が閲覧しました

Why Am I Getting the

SQL クエリでの「変数名 '@' はすでに宣言されています」エラー

SQL クエリを実行するときは、次のことを確認することが重要です。クエリ バッチまたはストアド プロシージャ内で宣言された変数名は一意です。このエラーは、'@' プレフィックスを使用した変数置換を使用するときによく発生します。

エラーの原因

提供されたコードでは、'@LockState' の 2 番目のインスタンスパラメータコレクション内にあるとエラーが発生します。これは、各パラメータが同じクエリ内で一意の名前を持つ必要があるためです。

解決策

このエラーを解決するには、次の解決策のいずれかを実装します。

  • 各パラメータのコレクションをクリアします反復:

各ループ反復の後に rwd.command.Parameters.Clear() を使用して、以前に追加されたパラメーターを削除し、次の反復が新しいセットで開始されるようにします。

for (long counter = from; counter <= to; counter++)
{
    rwd.command.Parameters.Clear();
    // ... (remaining code)
}
ログイン後にコピー
  • パラメータを外部で宣言するループ:

ループの外でパラメータを宣言し、ループ内で値を割り当てます。これにより、パラメータが 1 回だけ定義されることが保証されます。

rwd.command.Parameters.Add(new SqlParameter("@LockState", SqlDbType.NVarChar));
rwd.command.Parameters.Add(new SqlParameter("@card_descr", SqlDbType.NVarChar));

for (long counter = from; counter <= to; counter++)
{
    // ... (remaining code)
    rwd.command.Parameters["@LockState"].Value = 1;
    rwd.command.Parameters["@card_descr"].Value = txt_desc2.Text;
}
ログイン後にコピー

これらの手順に従うことで、クエリ内で変数名を一意にすることができ、「変数名 '@' はすでに宣言されています」エラーを防ぎ、確実に変数名を定義できます。シームレスな実行。

以上がSQL クエリで「変数名 '@' はすでに宣言されています」というエラーが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート