0

SSMS 2012では、設定後Options > Query Execution > ANSI > SET IMPLICIT_TRANSACTIONSこのSO投稿を参照してください

クエリウィンドウに次のコードがあります。

begin transaction 
    select @@TRANCOUNT
    begin
    declare @someNumber int; set @someNumber = 1; 
    print @someNumber;
    end
rollback 

ブロック全体を選択してを押すExecuteと、期待される結果、つまり1が表示されます。

ただし、最初の4行を選択して実行し、次に5行目を選択するとprint @someNumber;、次のメッセージが表示されます。

メッセージ137、レベル15、状態2、行1
スカラー変数「@someNumber」を宣言する必要があります。

変数のスコープは正確には何ですか?

私は困惑しています。誰かが光を当てたり、私を正しい方向に向けたりできますか?

4

2 に答える 2

1

変数のスコープはバッチごとです。

ローカル変数のスコープは、それが宣言されているバッチです。

「実行」を押すたびにバッチが実行されます。したがって、2回目の実行では、宣言されません

2回の実行で何をしているのかはこれです

--start of batch 1
    begin transaction 
        select @@TRANCOUNT
        begin
        declare @someNumber int; set @someNumber = 1; 
--end of batch 1
        GO --separate batch after this
--start of batch 2
        print @someNumber;
        end
    rollback
--end of batch 2
于 2012-11-08T14:01:47.390 に答える
0

SSMSでは、変数は実行中存続します。

宣言のみを実行すると、実行が終了すると終了します。

次に、変数のprintステートメントを実行すると、この実行内で宣言されていないため、存在しません。

于 2012-11-08T14:03:07.970 に答える