サーチ…


構文

  • DECLARE @VariableNameデータ型[=値];
  • SET @VariableName = Value;

テーブル変数を宣言する

DECLARE @Employees TABLE
(
    EmployeeID INT NOT NULL PRIMARY KEY,
    FirstName NVARCHAR(50) NOT NULL,
    LastName NVARCHAR(50) NOT NULL,
    ManagerID INT NULL
)

通常の表を作成するときは、 CREATE TABLE Name (Columns)構文を使用します。表変数を作成するときは、 DECLARE @Name TABLE (Columns)構文を使用します。

SELECTステートメント内のテーブル変数を参照するには、SQL Serverではテーブル変数にエイリアスを指定する必要があります。そうしないと、エラーが発生します。

スカラー変数 "@TableVariableName"を宣言しなければなりません。

すなわち、

DECLARE @Table1 TABLE (Example INT)
DECLARE @Table2 TABLE (Example INT)

/*
-- the following two commented out statements would generate an error:
SELECT *
FROM @Table1
INNER JOIN @Table2 ON @Table1.Example = @Table2.Example

SELECT *
FROM @Table1
WHERE @Table1.Example = 1
*/

-- but these work fine:
SELECT *
FROM @Table1 T1
INNER JOIN @Table2 T2 ON T1.Example = T2.Example

SELECT *
FROM @Table1 Table1
WHERE Table1.Example = 1

SETを使用して変数を更新する

DECLARE @VariableName INT
SET @VariableName = 1
PRINT @VariableName

1

SETを使用すると、一度に1つの変数のみを更新できます。

SELECTを使用した変数の更新

SELECTを使用すると、一度に複数の変数を更新できます。

DECLARE @Variable1 INT, @Variable2 VARCHAR(10)
SELECT @Variable1 = 1, @Variable2 = 'Hello'
PRINT @Variable1
PRINT @Variable2

1

こんにちは


SELECTを使用して表の列から変数を更新する場合、複数の値がある場合は、 最後の値が使用されます。 (通常の順序ルールが適用されます。ソートが指定されていない場合、順序は保証されません)。

CREATE TABLE #Test (Example INT)
INSERT INTO #Test VALUES (1), (2)

DECLARE @Variable INT
SELECT @Variable = Example
FROM #Test
ORDER BY Example ASC

PRINT @Variable

2

SELECT TOP 1 @Variable = Example
FROM #Test
ORDER BY Example ASC

PRINT @Variable

1

クエリによって返された行がない場合、変数の値は変更されません。

SELECT TOP 0 @Variable = Example
FROM #Test
ORDER BY Example ASC

PRINT @Variable

1

一度に複数の変数を宣言し、初期値

DECLARE 
  @Var1 INT = 5, 
  @Var2 NVARCHAR(50) = N'Hello World', 
  @Var3 DATETIME = GETDATE()

複合代入演算子

SQL Server 2008 R2

サポートされている複合演算子:

+=追加と割り当て

-=減算して割り当て

*=乗算して割り当て

/=除算して割り当てます

%=モジュロとアサイン

&=ビット単位のANDおよび代入

^=ビットごとのXORと代入

|=ビットごとの論理和と代入

使用例:

DECLARE @test INT = 42;
SET @test += 1;
PRINT @test;    --43
SET @test -= 1;
PRINT @test;    --42
SET @test *= 2
PRINT @test;    --84
SET @test /= 2;
PRINT @test;    --42

テーブルから選択して変数を更新する

データの構造に応じて、動的に更新する変数を作成することができます。

DECLARE @CurrentID int = (SELECT TOP 1 ID FROM Table ORDER BY CreateDate desc)


DECLARE @Year int = 2014
DECLARE @CurrentID int = (SELECT ID FROM Table WHERE Year = @Year)

ほとんどの場合、このメソッドを使用するときにクエリが1つの値しか返さないようにする必要があります。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow