SQLserverにおけるdeclare変数の使用法
SQLにおけるdeclareの使用法
SQLの具体的な構文を探ったことはありませんが、いつもc#に従ってSQLを真似ています。数日前、私のプロジェクトで問題に遭遇し、declare defined variablesのスコープに興味を持つようになりました。
我々はすべて、我々は変数を定義した場合、彼の役割は、もしの終わりまで、外は変数を識別するためにされていない場合は、使用することはできません他の場合は、単に書き込みで、C#のローカル変数を知っている。 /変数は、もしの外側に認識されていない、とelseで使用することはできません。
if(true)
{
Int32i=1;
Console.WriteLine(i);
}
このiのスコープはifの内側で、もしこの変数をifの外側で使うなら
if(true)
{
Int32i=1;
Console.WriteLine(i);
}
Console.WriteLine(i);
次に、2つ目の出力文はエラーを報告します
名前 'i' は現在のコンテキストに存在しません。
これは、i がスコープ外であることを意味します。
では、このコードをsqlで書いたらどうなるでしょうか?まず、ifの中に書きます。
IF1=1
BEGIN
DECLARE@testVARCHAR
SET@test='1'
PRINT'inif:'+@test
END
実行し、期待通りの結果であるif:1に出力される結果を確認してください。次に、ifの外で変数@testを使用してみましょう。
IF1=1
BEGIN
DECLARE@testVARCHAR
SET@test='1'
PRINT'inif:'+@test
END
PRINT'outif:'+@test
みなさんがどう思うかわかりませんが、私の脳は、これは変数のスコープ外なので、エラーを報告するはずだと考えているのです。実際の結果は、エラーにならないばかりか、@testの値がそのまま残っています。
in if:1
アウト if:1
この結果を見て、当時は落ち込みました。SQLがあまりにも予想外だったからです。
SQL SERVER 2005のヘルプのdeclareのところで、3行目の注釈 "ローカル変数のスコープは、それが宣言されたバッチです"
Msdnのアドレスです。 http://msdn.microsoft.com/zh-cn/library/ms188927.aspx
この線は、これだけ大きな作品ではかなり控えめなものです。
これで、declare変数のスコープはその変数があるバッチであり、ifはそのスコープをブロックしないことがわかりました。したがって、上のコードのifの中と外のコードはバッチ内にあり、@testは利用でき、ifの中に設定した値もそのまま利用できます。
コードを修正する方法は以下の通りです。GO文はSQLでバッチを区別するために使用されます。
IF1=1
BEGIN
DECLARE@testVARCHAR
SET@test='1'
PRINT'inif:'+@test
END
GO
PRINT'outif:'+@test
その通りです。SQLで構文を確認すると、「Must declare scalar variable "@test"" 」というエラーが表示されます。
注:GO は sql 文の最後に使用します。例えば、次のようなバッチ文です。 select *from ,b select *from a の最後の select の後に GO を付けて、2つの sql 文を一度に実行できるようにします。
今回の記事は、SQLサーバーのdeclare変数の使い方についてです。SQLサーバーのdeclare変数についてのより詳しい情報は、BinaryDevelopの過去の記事を検索するか、以下の関連記事を引き続きご覧になってください。
関連
-
Management StudioでWebブラウザを使用したSQL Server
-
SQL2005 ビューデッドロック ストアドプロシージャ sp_who_lock
-
複数注文の場合の償却額の計算方法について
-
SQLServer 2005でサーバー名がない場合の2つの解決策
-
Sql server 2005 インストール時に Net バージョン登録要求の警告が表示される。
-
SQL2005ExpressでACCESSのデータベースをインポートする2つの方法
-
SQL server 2005でリモートデータベースをローカルにインポートする方法
-
sql2005 ローカルコンピュータの SQL SERVER サービスが起動し、その後停止する 解決方法
-
Sql Server 2005 のポート 1433 で LAN アクセスを開放し、リモート接続を行う。
-
SQLServerは、ユーザーのデフォルトデータベースを開くことができません ログイン失敗エラー4064の解決策
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SQL Server 2005のすべてのテーブルで、特定のカラムを検索する方法
-
Microsoft Sql server2005 のインストール手順のグラフィック詳細とよくある問題の解決法
-
SQL 2005が設定できない問題を解決する
-
SQL server 2005 をインストールすると、32 ビット ASP.NET は既に登録されているので、64 ビットのソリューションを登録する必要があるとの警告が表示される。
-
SQL Server 2005における外部結合の使用法
-
Sqlserver 2005のログファイルが大きすぎる削減する方法
-
SQL Server 2005 Management Studio Express Enterprise Managerで英語を簡体字中国語に変換する方法
-
SQL Server 2005のデータベースでtempdbの場所を変更する方法
-
文字列中の最大の部分的インクリメンタルを計算する SQL メソッド
-
sql server 2005 データベースのバックアップ・リストア グラフィックチュートリアル