これは私のSQLコードです -
declare @maxprice int --1
set @maxprice = 1000 --2
select @maxprice --3
これらの組み合わせ 1,2 と 1,2,3 をエラーなしで実行できます。しかし、最初に 1,2 を実行し、後で 3 を実行すると、前述のエラーが発生します。
なぜこれが起こるのか理解できません。select @maxprice は、通常の select ステートメントに似ているべきではありませんか?
これは私のSQLコードです -
declare @maxprice int --1
set @maxprice = 1000 --2
select @maxprice --3
これらの組み合わせ 1,2 と 1,2,3 をエラーなしで実行できます。しかし、最初に 1,2 を実行し、後で 3 を実行すると、前述のエラーが発生します。
なぜこれが起こるのか理解できません。select @maxprice は、通常の select ステートメントに似ているべきではありませんか?
このようなSQLステートメントはブロックとして実行され、コマンドと定義はブロック内でのみ有効です。ブロックが終了するとすぐに、宣言された変数はスコープ外になり、未定義になります。
したがって、3行目だけを実行すると、SQLサーバーは、以前に同じ変数で何かを行ったことがあるかどうかを認識またはチェックせず、当然、変数が定義されていないと文句を言います。
そうではなく、宣言された変数がスコープ内に残った場合(たとえば、セッションの期間中)、システムは、たとえば、1つのプロシージャで@maxprice
宣言することと、別の入力します。int
money
SQL Serverの変数とスコープ規則の詳細については、こちらをご覧ください。