SQL 変数: SQL Server 変数の宣言、設定、選択
SQL Server の変数とは何ですか?
MS SQL では、変数はメモリ位置へのプレースホルダーとして機能するオブジェクトです。 変数は単一のデータ値を保持します。
SQL の変数の型: ローカル、グローバル
MS SQL には XNUMX 種類の変数があります。
- ローカル変数
- グローバル変数。
ただし、ユーザーが作成できるのはローカル変数のみです。
以下の図は、で利用可能な XNUMX 種類の変数を説明しています。 MS SQLサーバー.
ローカル変数
- ユーザーがローカル変数を宣言します。
- デフォルトでは、ローカル変数は次で始まります。 @.
- すべてのローカル変数スコープには、次の制限があります。 現在のバッチまたは手順 任意のセッション内で。
グローバル変数
- システムはグローバル変数を維持します。 ユーザーはそれらを宣言することはできません。
- グローバル変数は次で始まります @@
- 保管します セッション関連情報.
SQL で変数を宣言する方法
- バッチまたはプロシージャで変数を使用する前に、次のことを行う必要があります。 変数を宣言します。
- DECLARE コマンドは、メモリ位置のプレースホルダーとして機能する変数を DECLARE するために使用されます。
- 宣言が行われた場合のみ、変数はバッチまたはプロシージャの後続の部分で使用できます。
TSQL 構文:
DECLARE { @LOCAL_VARIABLE[AS] data_type [ = value ] }
ルール:
- 初期化は宣言時のオプションです。
- デフォルトでは、DECLARE は変数を NULL に初期化します。
- キーワード「AS」の使用はオプションです。
- 複数のローカル変数を宣言するには、最初のローカル変数定義の後にカンマを使用し、次のローカル変数名と データ・タイプ.
変数の宣言の例
クエリ: 「AS」を使用した場合
DECLARE @COURSE_ID AS INT;
クエリ: 「AS」なし
DECLARE @COURSE_NAME VARCHAR (10);
クエリ: XNUMX つの変数を DECLARE
DECLARE @COURSE_ID AS INT, @COURSE_NAME VARCHAR (10);
SQL変数への値の代入
次のように変数に値を割り当てることができます 三 方法:
- DECLARE キーワードを使用した変数宣言中。
- SETの使用
- SELECTの使用
XNUMX つの方法すべてを詳しく見てみましょう。
DECLAREキーワードを使用した変数宣言時
T-SQL 構文:
DECLARE { @Local_Variable [AS] Datatype [ = value ] }
ここでは、データ型の後に「=」を使用し、その後に割り当てる値を使用できます。
クエリ:
DECLARE @COURSE_ID AS INT = 5 PRINT @COURSE_ID
SQL SET VARIABLE の使用
場合によっては、宣言と初期化を分離しておきたいことがあります。 SET を使用すると、変数の宣言後に変数に値を割り当てることができます。SET を使用して値を割り当てるさまざまな方法を以下に示します。
例: SET を使用して変数に値を代入する
構文:
DECLARE @Local_Variable <Data_Type> SET @Local_Variable = <Value>
クエリ:
DECLARE @COURSE_ID AS INT SET @COURSE_ID = 5 PRINT @COURSE_ID
例: 値を代入します。 複数の変数 SETを使用して。
構文:
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable_2 <Data_Type>, SET @Local_Variable_1 = <Value_1> SET @Local_Variable_2 = <Value_2>
ルール: XNUMX つの SET キーワードは、値を割り当てるためにのみ使用できます。 XNUMXつの変数.
クエリ:
DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5) SET @COURSE_ID = 5 SET @COURSE_NAME = 'UNIX' PRINT @COURSE_ID PRINT @COURSE_NAME
例: を使用して変数に値を代入します。 スカラーサブクエリ SETを使用する
構文:
DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable_2 <Data_Type>,SET @Local_Variable_1 = (SELECT <Column_1> from <Table_Name> where <Condition_1>)
ルール:
- クエリを括弧で囲みます。
- クエリはスカラー クエリである必要があります。スカラー クエリとは、結果が 1 行と 1 列のみであるクエリです。そうでない場合、クエリはエラーをスローします。
- クエリがゼロ行を返す場合、変数は EMPTY、つまり NULL に設定されます。
仮定: 以下に示すように、99 つの列を持つ「GuruXNUMX」というテーブルがあるとします。
今後のチュートリアルでは「Guru99」テーブルを使用します
例1: サブクエリが結果として XNUMX 行を返す場合。
DECLARE @COURSE_NAME VARCHAR (10) SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 3) PRINT @COURSE_NAME
例 2: サブクエリの結果としてゼロ行が返された場合
DECLARE @COURSE_NAME VARCHAR (10) SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5) PRINT @COURSE_NAME
この特定のケースでは、変数値は EMPTY、つまり NULL です。
SQL SELECT VARIABLE の使用
SET と同様に、DECLARE を使用して変数を宣言した後、SELECT を使用して変数に値を割り当てることもできます。 以下に、SELECT を使用して値を割り当てるさまざまな方法を示します。
例: SELECT を使用して変数に値を代入する
構文:
DECLARE @LOCAL_VARIABLE <Data_Type> SELECT @LOCAL_VARIABLE = <Value>
クエリ:
DECLARE @COURSE_ID INT SELECT @COURSE_ID = 5 PRINT @COURSE_ID
例: SELECT を使用して複数の変数に値を代入する
構文:
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Value_1>, @Local_Variable _2 = <Value_2>
ルール: SET とは異なり、SELECT を使用して値を割り当てることができます。 複数の変数に で区切られています コンマ.
DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5) SELECT @COURSE_ID = 5, @COURSE_NAME = 'UNIX' PRINT @COURSE_ID PRINT @COURSE_NAME
例: SELECT を使用したサブクエリで変数に値を代入する
構文:
DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = (SELECT <Column_1> from <Table_name> where <Condition_1>)
ルール:
- クエリを括弧で囲みます。
- クエリはスカラー クエリである必要があります。スカラー クエリは、結果が 1 行 1 列であるクエリです。そうでない場合、クエリはエラーをスローします。
- クエリがゼロ行を返す場合、変数は EMPTY、つまり NULL になります。
- 「Guru99」テーブルを再検討してください
例1: サブクエリが結果として XNUMX 行を返す場合。
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 1) PRINT @COURSE_NAME
例2: サブクエリの結果としてゼロ行が返された場合
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5) PRINT @COURSE_NAME
この特定のケースでは、変数は EMPTY、つまり NULL になります。
例3: 通常の SELECT ステートメントを使用して変数に値を割り当てます。
構文:
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Column_1> from <Table_name> where <Condition_1>
ルール:
- SET とは異なり、クエリの結果が複数行になる場合、変数値は最後の行の値に設定されます。
- クエリがゼロ行を返す場合、変数は EMPTY、つまり NULL に設定されます。
クエリ 1: クエリは XNUMX 行を返します。
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 3 PRINT @COURSE_NAME
クエリ 2: クエリは複数の行を返します。
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 PRINT @COURSE_NAME
この特殊なケースでは、変数の値は次のようになります。 最後の行の値に設定します.
クエリ 3: クエリは行を返しません。
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 5 PRINT @COURSE_NAME
この特定のケースでは、変数は EMPTY、つまり NULL です。
その他の SQL 変数の例
クエリで変数を使用する
クエリ:
DECLARE @COURSE_ID Int = 1 SELECT * from Guru99 where Tutorial_id = @COURSE_ID
SQL Server 変数に関する興味深い事実!
- ローカル変数はPRINTとSELECT COMMANDを使用して表示できます。
- テーブル データ型では、宣言中に「AS」を使用できません。
- SET は ANSI 標準に準拠していますが、SELECT は準拠していません。
- @ という名前のローカル変数を作成することもできます。 たとえば次のように宣言できます。
'DECLARE @@ as VARCHAR (10)'
まとめ
- 変数は、プレースホルダーとして機能するオブジェクトです。
- ローカルとグローバルの XNUMX 種類の変数が存在します。
- 変数を割り当てるには、次の1つの方法があります。2) DECLAREを使用する 3) SETを使用する XNUMX) SELECTを使用する