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

SQL クエリで「変数名はすでに宣言されています」エラーがスローされるのはなぜですか?

Susan Sarandon
リリース: 2025-01-03 08:42:39
オリジナル
391 人が閲覧しました

Why Does My SQL Query Throw a

SQL クエリ内の変数名の競合

エラー メッセージ「変数名 '@' はすでに宣言されています。変数名クエリ バッチまたはストアド プロシージャ内で一意である必要があります。」は、SQL 内の変数名の競合を示します。 code.

提供されたコード スニペットでは、「btn_lock2_Click」イベント ハンドラー内のループで同じ変数名「@LockState」を複数回使用しようとすると問題が発生します。 SQL では、混乱や曖昧さを防ぐために、クエリまたはストアド プロシージャ内に一意の変数名が必要です。

解決策 1: 各ループ反復後にパラメータをクリアする

解決策の 1 つ競合は、各ループ反復の前にパラメータ コレクションをクリアすることです。これにより、同じパラメータ名がコレクションに複数回追加されなくなります。

for (long counter = from; counter <= to; counter )
{

rwd.command.Parameters.Clear(); // Clear the parameters collection before adding new parameters

string upd = "update card set LockState=@lockstate, card_descr=@card_descr where [cardNumber] = N'{0}'";
rwd.command.CommandText = upd;
rwd.command.Parameters.Add(new SqlParameter("@LockState", SqlDbType.NVarChar)).Value = 1;
rwd.command.Parameters.Add(new SqlParameter("@card_descr", SqlDbType.NVarChar)).Value = txt_desc2.Text;
...
ログイン後にコピー

}

解決策 2: パラメータを定義する前にLoop

または、ループの前にパラメータを定義し、各反復内で値を更新することもできます。このアプローチにより、ループの開始前にパラメーターがコレクション内に存在することが保証され、クリアする必要がなくなります。

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 )
{

string upd = "update card set LockState=@lockstate, card_descr=@card_descr where [cardNumber] = N'{0}'";
rwd.command.CommandText = upd;

rwd.command.Parameters["@LockState"].Value = 1;
rwd.command.Parameters["@card_descr"].Value = txt_desc2.Text;

...
ログイン後にコピー

}

これらのソリューションのいずれかを使用すると、SQL クエリに一意の変数名が付けられるようになり、「すでに宣言されている」変数名が使用されることを防ぐことができます。エラー。

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

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