SET (Transact-SQL)SET (Transact-SQL)

適用対象: ○SQL Server ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

DECLARE @ を使用して、以前に作成した、指定のローカル変数を設定する local_variable ステートメントは、指定された値にします。Sets the specified local variable, previously created by using the DECLARE @local_variable statement, to the specified value.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

SQL Server と Azure SQL Database の構文:Syntax for SQL Server and Azure SQL Database:

SET   
{ @local_variable  
    [ . { property_name | field_name } ] = { expression | udt_name { . | :: } method_name }  
}  
|  
{ @SQLCLR_local_variable.mutator_method  
}  
|  
{ @local_variable  
    {+= | -= | *= | /= | %= | &= | ^= | |= } expression  
}  
|   
  { @cursor_variable =   
    { @cursor_variable | cursor_name   
    | { CURSOR [ FORWARD_ONLY | SCROLL ]   
        [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]   
        [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]   
        [ TYPE_WARNING ]   
    FOR select_statement   
        [ FOR { READ ONLY | UPDATE [ OF column_name [ ,...n ] ] } ]   
      }   
    }  
}   

Azure SQL Data Warehouse と Parallel Data Warehouse の構文:Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse:

SET @local_variable {+= | -= | *= | /= | %= | &= | ^= | |= } expression  

引数Arguments

@ local_variable@ local_variable
cursortextntextimage、または table を除く任意の型の変数の名前。The name of a variable of any type except cursor, text, ntext, image, or table. 変数名の先頭には 1 つのアット マーク ( @ ) を指定します。Variable names must start with one at sign (@). 変数名は識別子の規則に従っている必要があります。Variable names must follow the rules for identifiers.

property_nameproperty_name
ユーザー定義型のプロパティ。A property of a user-defined type.

field_namefield_name
ユーザー定義型のパブリック フィールド。A public field of a user-defined type.

udt_nameudt_name
共通言語ランタイム (CLR) ユーザー定義型の名前。The name of a common language runtime (CLR) user-defined type.

{ . | :: }
CLR ユーザー定義型のメソッドを指定します。Specifies a method of a CLR user-define type. 静的メソッド以外のインスタンス メソッドでは、ピリオド ( . ) を使用します。For an instance (non-static) method, use a period (.). 静的メソッドでは、2 つのコロン ( :: ) を使用します。For a static method, use two colons (::). CLR ユーザー定義型のメソッド、プロパティ、またはフィールドを呼び出すには、その型に対する EXECUTE 権限が必要です。To invoke a method, property, or field of a CLR user-defined type, you must have EXECUTE permission on the type.

method_name ( argument [ , ... n ] )method_name ( argument [ ,... n ] )
ユーザー定義型のメソッド。このメソッドでは、ある型のインスタンスの状態を変更するために、1 つ以上の引数を受け取ります。A method of a user-defined type that takes one or more arguments to modify the state of an instance of a type. 静的メソッドはパブリックであることが必要です。Static methods must be public.

@ SQLCLR_local_variable@ SQLCLR_local_variable
型がアセンブリに存在する変数。A variable whose type is located in an assembly. 詳細については、「共通言語ランタイム (CLR) 統合のプログラミング概念」をご覧ください。For more information, see Common Language Runtime (CLR) Integration Programming Concepts.

mutator_methodmutator_method
オブジェクトの状態を変更できるアセンブリのメソッド。A method in the assembly that can change the state of the object. このメソッドには SQLMethodAttribute.IsMutator が適用されます。SQLMethodAttribute.IsMutator is applied to this method.

{ += | -= | *= | /= | %= | &= | ^= | |= }
複合代入演算子です。Compound assignment operator:

+= 加算して代入+= Add and assign

-= 減算して代入-= Subtract and assign

*= 乗算して代入*= Multiply and assign

/= 除算して代入/= Divide and assign

%= 剰余を代入%= Modulo and assign

&= ビットごとの AND 演算を行って代入&= Bitwise AND and assign

^= ビットごとの XOR 演算を行って代入^= Bitwise XOR and assign

|= ビットごとの OR 演算を行って代入|= Bitwise OR and assign

式 (expression)expression
任意の有効なAny valid expression.

cursor_variablecursor_variable
カーソル変数の名前を指定します。The name of a cursor variable. ターゲットのカーソル変数が以前に他のカーソルを参照していた場合は、以前の参照は削除されます。If the target cursor variable previously referenced a different cursor, that previous reference is removed.

cursor_namecursor_name
DECLARE CURSOR ステートメントを使用して宣言したカーソルの名前。The name of a cursor declared by using the DECLARE CURSOR statement.

CURSORCURSOR
SET ステートメントにカーソルの宣言が含まれることを指定します。Specifies that the SET statement contains a declaration of a cursor.

SCROLLSCROLL
カーソルがすべての FETCH オプションをサポートすることを指定します:FIRST、LAST、NEXT、PRIOR、RELATIVE、ABSOLUTE。Specifies that the cursor supports all fetch options: FIRST, LAST, NEXT, PRIOR, RELATIVE, and ABSOLUTE. SCROLL と FAST_FORWARD を一緒に指定することはできません。You can't specify SCROLL when you've also specified FAST_FORWARD.

FORWARD_ONLYFORWARD_ONLY
カーソルで、FETCH NEXT オプションだけがサポートされることを指定します。Specifies that the cursor supports only the FETCH NEXT option. カーソルは、最初の行から最後の行への一方向にのみ取得されます。The cursor is retrieved only in one direction, from the first to the last row. STATIC、KEYSET、DYNAMIC のいずれのキーワードも指定しないで FORWARD_ONLY を指定した場合、カーソルは DYNAMIC として実装されます。When you specify FORWARD_ONLY without the STATIC, KEYSET, or DYNAMIC keywords, the cursor is implemented as DYNAMIC. FORWARD_ONLY も SCROLL も指定しなかった場合は、STATIC、KEYSET、または DYNAMIC キーワードを指定しない限り、FORWARD_ONLY が既定値になります。If you don't specify either FORWARD_ONLY or SCROLL, FORWARD_ONLY is the default, unless you specify the keywords STATIC, KEYSET, or DYNAMIC. STATIC、KEYSET、および DYNAMIC カーソルの既定値は SCROLL です。For STATIC, KEYSET, and DYNAMIC cursors, SCROLL is the default.

STATICSTATIC
データの一時コピーを作成するためのカーソルを定義します。作成されるコピーは、カーソルで使用されます。Defines a cursor that makes a temporary copy of the data to be used by the cursor. カーソルに対するすべての要求は、tempdb 内のこの一時テーブルから応答されます。All requests to the cursor are answered from this temporary table in tempdb. その結果、カーソルが開かれた後でベース テーブルに対して行われた変更は、カーソルに対して行われるフェッチによって返されるデータには反映されません。As a result, modifications made to the base tables after the cursor is opened aren't reflected in the data returned by fetches made to the cursor. また、このカーソルでは変更はサポートされていません。And, this cursor doesn't support modifications.

KEYSETKEYSET
カーソルを開くときに、カーソル内の行の構成要素と順序が固定されることを指定します。Specifies that the membership and order of rows in the cursor are fixed when the cursor is opened. 行を一意に識別するキーのセットは、tempdb の keysettable に組み込まれています。The set of keys that uniquely identify the rows is built into the keysettable in tempdb. ベース テーブル内にあるキー以外の値に対する変更が、カーソル所有者によって実行されるか、または他のユーザーによってコミットされると、その変更は、カーソル所有者がカーソルの周囲をスクロールするときに表示されます。Changes to nonkey values in the base tables, either made by the cursor owner or committed by other users, are visible as the cursor owner scrolls around the cursor. 他のユーザーによって行われた挿入は表示されません。Transact-SQLTransact-SQL サーバー カーソルを介して、挿入を行うことはできません。Inserts made by other users aren't visible, and inserts can't be made through a Transact-SQLTransact-SQL server cursor.

行が削除された場合に、その行をフェッチしようとすると、@@FETCH_STATUS が -2 に設定されて返されます。If a row is deleted, an attempt to fetch the row returns an @@FETCH_STATUS of -2. カーソル外部からキー値を更新するのは、古い行を削除した後で新しい行を挿入するのと同じです。Updates of key values from outside the cursor are similar to a delete of the old row followed by an insert of the new row. 新しい値の行は表示されず、古い値の行をフェッチしようとすると @@FETCH_STATUS が -2 に設定されて返されます。The row with the new values isn't visible, and tries to fetch the row with the old values return an @@FETCH_STATUS of -2. WHERE CURRENT OF 句を指定してカーソルから更新を行った場合は、新しい値が表示されます。The new values are visible if the update happens through the cursor by specifying the WHERE CURRENT OF clause.

DYNAMICDYNAMIC
結果セット内の行に対して行ったすべてのデータ変更を反映するカーソルを定義します。このデータ変更は、カーソル所有者がカーソルの周囲をスクロールするときに行われたものです。Defines a cursor that reflects all data changes made to the rows in its result set as the cursor owner scrolls around the cursor. 行のデータ値、順序、メンバーシップは、各フェッチ操作で変化する可能性があります。The data values, order, and membership of the rows can change on each fetch. 動的カーソルでは、絶対フェッチ オプションと相対フェッチ オプションはサポートされません。The absolute and relative fetch options aren't supported with dynamic cursors.

FAST_FORWARDFAST_FORWARD
最適化が有効に設定された FORWARD_ONLY、READ_ONLY カーソルを指定します。Specifies a FORWARD_ONLY, READ_ONLY cursor with optimizations enabled. SCROLL も指定した場合、FAST_FORWARD は指定できません。FAST_FORWARD can't be specified when SCROLL is also specified.

READ_ONLYREAD_ONLY
このカーソルによる更新を禁止します。Prevents updates from being made through this cursor. UPDATE または DELETE ステートメントの WHERE CURRENT OF 句で、このカーソルを参照することはできません。The cursor can't be referenced in a WHERE CURRENT OF clause in an UPDATE or DELETE statement. このオプションは、更新対象のカーソルの既定の機能をオーバーライドします。This option overrides the default capability of a cursor to be updated.

SCROLL LOCKSSCROLL LOCKS
カーソルによって行われる位置指定更新または位置指定削除の成功が保証されることを指定します。Specifies that positioned updates or deletes made through the cursor are guaranteed to succeed. SQL ServerSQL Server はカーソルに読み取られた行をロックし、後で変更できることを保証します。locks the rows as they're read into the cursor to guarantee their availability for later modifications. FAST_FORWARD を指定した場合、SCROLL_LOCKS は指定できません。You can't specify SCROLL_LOCKS when FAST_FORWARD is also specified.

OPTIMISTICOPTIMISTIC
行がカーソルに読み取られてから更新された場合に、カーソルによって行われる位置指定更新または位置指定削除が失敗することを指定します。Specifies that positioned updates or deletes made through the cursor don't succeed if the row was updated since being read into the cursor. SQL ServerSQL Server では、行がカーソルに読み取られるとき、その行はロックされません。doesn't lock rows as they're read into the cursor. 代わりに timestamp 列の値を比較するか、テーブルに timestamp 列がない場合はチェックサム値を使用して、行がカーソルに読み込まれてから変更されたかどうかが判別されます。Instead, it uses comparisons of timestamp column values, or a checksum value, if the table has no timestamp column, to determine if the row was modified after being read into the cursor. 行が変更されている場合、位置指定更新または位置指定削除の試行は失敗します。If the row was modified, the attempted positioned update or delete fails. FAST_FORWARD を指定した場合、OPTIMISTIC は指定できません。You can't specify OPTIMISTIC when FAST_FORWARD is also specified.

TYPE_WARNINGTYPE_WARNING
カーソルの種類が、要求されたものから別のものに暗黙的に変換された場合、クライアントに警告メッセージが送信されることを指定します。Specifies that a warning message is sent to the client when the cursor is implicitly converted from the requested type to another.

FOR select_statementFOR select_statement
カーソルの結果セットを定義する標準の SELECT ステートメントです。Is a standard SELECT statement that defines the result set of the cursor. カーソル宣言の select_statement 内で FOR BROWSE および INTO キーワードは許可されません。The keywords FOR BROWSE, and INTO aren't allowed within the select_statement of a cursor declaration.

DISTINCT、UNION、GROUP BY、または HAVING を使用した場合、または select_list に集計式が含まれる場合、カーソルは STATIC として作成されます。If you use DISTINCT, UNION, GROUP BY, or HAVING, or you include an aggregate expression in the select_list, the cursor is created as STATIC.

基になる各テーブルに一意なインデックスがなく、ISO SCROLL カーソルまたは Transact-SQLTransact-SQL KEYSET カーソルが要求された場合、カーソルは自動的に STATIC カーソルになります。If each underlying table doesn't have a unique index and an ISO SCROLL cursor or if a Transact-SQLTransact-SQL KEYSET cursor is requested, the cursor is automatically a STATIC cursor.

select_statement に、列が一意な行識別子 (ROWID) になっていない ORDER BY 句が含まれる場合、DYNAMIC カーソルは KEYSET カーソルに変換されます。KEYSET カーソルを開くことができない場合、DYNAMIC カーソルは STATIC カーソルに変換されます。If select_statement contains an ORDER BY clause in which the columns aren't unique row identifiers, a DYNAMIC cursor is converted to a KEYSET cursor, or to a STATIC cursor if a KEYSET cursor can't be opened. STATIC キーワードを指定せず、ISO 構文を使用して定義されたカーソルの場合も、このプロセスが行われます。This process also occurs for a cursor defined by using ISO syntax but without the STATIC keyword.

READ ONLYREAD ONLY
このカーソルによる更新を禁止します。Prevents updates from being made through this cursor. UPDATE または DELETE ステートメントの WHERE CURRENT OF 句で、このカーソルを参照することはできません。The cursor can't be referenced in a WHERE CURRENT OF clause in an UPDATE or DELETE statement. このオプションは、更新対象のカーソルの既定の機能をオーバーライドします。This option overrides the default capability of a cursor to be updated. このキーワードは、以前は READ_ONLY と表記していましたが、今後は、READ と ONLY の間にアンダースコアではなくスペースを指定するようになりました。This keyword varies from the earlier READ_ONLY by having a space instead of an underscore between READ and ONLY.

UPDATE [OF column_name[ ,... n ] ]
カーソル内で更新できる列を定義します。Defines updatable columns within the cursor. OF column_name [ , ...n] を指定した場合は、指定した列に対してのみ更新ができます。If OF column_name [,...n] is supplied, only the columns listed allow modifications. 一覧を指定しないと、カーソルを READ ONLY として定義していない限り、すべての列を更新できます。When no list is supplied, all columns can be updated, unless the cursor has been defined as READ_ONLY.

RemarksRemarks

変数は宣言後、NULL に初期化されます。After a variable is declared, it's initialized to NULL. 宣言された変数に NULL 以外の値を代入するには、SET ステートメントを使用します。Use the SET statement to assign a value that isn't NULL to a declared variable. 変数に値を代入する SET ステートメントでは、1 つの値が返されます。The SET statement that assigns a value to the variable returns a single value. 複数の変数を初期化する場合は、各ローカル変数に対して 1 つずつ、SET ステートメントを使用してください。When you initialize multiple variables, use a separate SET statement for each local variable.

変数は式の内部だけで使用でき、オブジェクト名やキーワードの代わりに使用することはできません。You can use variables only in expressions, not instead of object names or keywords. 動的 Transact-SQLTransact-SQL ステートメントを作成するには、EXECUTE を使用します。To construct dynamic Transact-SQLTransact-SQL statements, use EXECUTE.

SET @ cursor_variable の構文規則に、LOCAL キーワードと GLOBAL キーワードは含まれません。The syntax rules for SET @cursor_variable don't include the LOCAL and GLOBAL keywords. SET @ cursor_variable = CURSOR... 構文を使用すると、カーソルは default to local cursor データベース オプションの設定に応じて、GLOBAL または LOCAL として作成されます。When you use the SET @cursor_variable = CURSOR... syntax, the cursor is created as GLOBAL or LOCAL, depending on the setting of the default to local cursor database option.

カーソル変数は、グローバル カーソルを参照する場合でも、常にローカルです。Cursor variables are always local, even if they reference a global cursor. カーソル変数でグローバル カーソルを参照する場合、カーソルに対してグローバル カーソル参照とローカル カーソル参照の両方が行われます。When a cursor variable references a global cursor, the cursor has both a global and a local cursor reference. 詳細については、例 C を参照してください。For more information, see Example C.

詳細については、「DECLARE CURSOR (Transact-SQL)」を参照してください。For more information, see DECLARE CURSOR (Transact-SQL).

複合代入演算子は、変数や、UPDATE、SELECT、および RECEIVE ステートメントの SET など、演算子の右側にある式で代入を行う任意の場所で使用できます。You can use the compound assignment operator anywhere you have an assignment with an expression on the right-hand side of the operator, including variables, and a SET in an UPDATE, SELECT, and RECEIVE statement.

SELECT ステートメントで、値を連結する目的で (つまり、集計値を計算する目的で) 変数を使用しないでください。Don't use a variable in a SELECT statement to concatenate values (that is, to compute aggregate values). 予期しないクエリ結果が生じる可能性があります。Unexpected query results may occur. これは、(代入を含め) SELECT リスト内のすべての式は、出力行ごとに 1 回のみ実行されるとは限らないためです。Because, all expressions in the SELECT list (including assignments) aren't necessarily run exactly once for each output row. 詳細については、サポート技術情報の資料を参照してください。For more information, see this KB article.

アクセス許可Permissions

public ロールのメンバーシップが必要です。Requires membership in the public role. すべてのユーザーは、SET @ local_variable を使用できます。All users can use SET @local_variable.

使用例Examples

A.A. SET によって初期化された変数の値を出力するPrinting the value of a variable initialized by using SET

次の例では、@myvar 変数を作成し、文字列値を代入して、@myvar 変数の値を出力します。The following example creates the @myvar variable, puts a string value into the variable, and prints the value of the @myvar variable.

DECLARE @myvar char(20);  
SET @myvar = 'This is a test';  
SELECT @myvar;  
GO  

B.B. SET によって値が代入されたローカル変数を、SELECT ステートメントで使用するUsing a local variable assigned a value by using SET in a SELECT statement

次の例では、@state という名前のローカル変数を作成し、そのローカル変数を SELECT ステートメントで使用して、Oregon 州に住む全従業員の姓名を検索します。The following example creates a local variable named @state and uses the local variable in a SELECT statement to find the first and last names of all employees who live in the state of Oregon.

USE AdventureWorks2012;  
GO  
DECLARE @state char(25);  
SET @state = N'Oregon';  
SELECT RTRIM(FirstName) + ' ' + RTRIM(LastName) AS Name, City  
FROM HumanResources.vEmployee  
WHERE StateProvinceName = @state;  

C.C. ローカル変数に対して複合代入を使用するUsing a compound assignment for a local variable

次の 2 つの例では、同じ結果が生成されます。The following two examples produce the same result. どちらも @NewBalance というローカル変数を作成し、その値に 10 を乗算して、SELECT ステートメントでローカル変数の新しい値を表示します。They create a local variable named @NewBalance, multiplies it by 10 and displays the new value of the local variable in a SELECT statement. 2 番目の例では、複合代入演算子を使用します。The second example uses a compound assignment operator.

/* Example one */  
DECLARE  @NewBalance  int ;  
SET  @NewBalance  =  10;  
SET  @NewBalance  =  @NewBalance  *  10;  
SELECT  @NewBalance;  
  
/* Example Two */  
DECLARE @NewBalance int = 10;  
SET @NewBalance *= 10;  
SELECT @NewBalance;  

D.D. グローバル カーソルに対して SET を使用するUsing SET with a global cursor

次の例では、ローカル変数を作成した後、カーソル変数をグローバル カーソル名に設定します。The following example creates a local variable and then sets the cursor variable to the global cursor name.

DECLARE my_cursor CURSOR GLOBAL   
FOR SELECT * FROM Purchasing.ShipMethod  
DECLARE @my_variable CURSOR ;  
SET @my_variable = my_cursor ;   
--There is a GLOBAL cursor declared(my_cursor) and a LOCAL variable  
--(@my_variable) set to the my_cursor cursor.  
DEALLOCATE my_cursor;   
--There is now only a LOCAL variable reference  
--(@my_variable) to the my_cursor cursor.  

E.E. SET を使用してカーソルを定義するDefining a cursor by using SET

次の例では、SET ステートメントを使用してカーソルを定義します。The following example uses the SET statement to define a cursor.

DECLARE @CursorVar CURSOR;  
  
SET @CursorVar = CURSOR SCROLL DYNAMIC  
FOR  
SELECT LastName, FirstName  
FROM AdventureWorks2012.HumanResources.vEmployee  
WHERE LastName like 'B%';  
  
OPEN @CursorVar;  
  
FETCH NEXT FROM @CursorVar;  
WHILE @@FETCH_STATUS = 0  
BEGIN  
    FETCH NEXT FROM @CursorVar  
END;  
  
CLOSE @CursorVar;  
DEALLOCATE @CursorVar;  

F.F. クエリから値を代入するAssigning a value from a query

次の例では、クエリを使用して変数に値を代入します。The following example uses a query to assign a value to a variable.

USE AdventureWorks2012;  
GO  
DECLARE @rows int;  
SET @rows = (SELECT COUNT(*) FROM Sales.Customer);  
SELECT @rows;  

G.G. ユーザー定義型のプロパティを変更してユーザー定義型変数に値を代入するAssigning a value to a user-defined type variable by modifying a property of the type

次の例では、ユーザー定義型の Point に対して X プロパティの値を変更し、値を設定します。The following example sets a value for user-defined type Point by modifying the value of the property X of the type.

DECLARE @p Point;  
SET @p.X = @p.X + 1.1;  
SELECT @p;  
GO  

H.H. ユーザー定義型のメソッドを起動してユーザー定義型変数に値を代入するAssigning a value to a user-defined type variable by invoking a method of the type

次の例では、ユーザー定義型の point に対して SetXY メソッドを起動し、値を設定します。The following example sets a value for user-defined type point by invoking method SetXY of the type.

DECLARE @p Point;  
SET @p=point.SetXY(23.5, 23.5);  

I.I. CLR 型の変数を作成してミューテーター メソッドを呼び出すCreating a variable for a CLR type and calling a mutator method

次の例では、Point 型の変数を作成し、Point のミューテーター メソッドを実行します。The following example creates a variable for the type Point, and then executes a mutator method in Point.

CREATE ASSEMBLY mytest from 'c:\test.dll' WITH PERMISSION_SET = SAFE  
CREATE TYPE Point EXTERNAL NAME mytest.Point  
GO  
DECLARE @p Point = CONVERT(Point, '')  
SET @p.SetXY(22, 23);  

例: Azure SQL データ ウェアハウスAzure SQL Data Warehouse および Parallel Data WarehouseParallel Data WarehouseExamples: Azure SQL データ ウェアハウスAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

J.J. SET によって初期化された変数の値を出力するPrinting the value of a variable initialized by using SET

次の例では、@myvar 変数を作成し、文字列値を代入して、@myvar 変数の値を出力します。The following example creates the @myvar variable, puts a string value into the variable, and prints the value of the @myvar variable.

DECLARE @myvar char(20);  
SET @myvar = 'This is a test';  
SELECT top 1 @myvar FROM sys.databases;  
  

K.K. SET によって値が代入されたローカル変数を、SELECT ステートメントで使用するUsing a local variable assigned a value by using SET in a SELECT statement

次の例では、@dept という名前のローカル変数を作成し、このローカル変数を SELECT ステートメントで使用して、Marketing 部門で働く全従業員の姓名を検索します。The following example creates a local variable named @dept and uses this local variable in a SELECT statement to find the first and last names of all employees who work in the Marketing department.

-- Uses AdventureWorks  
  
DECLARE @dept char(25);  
SET @dept = N'Marketing';  
SELECT RTRIM(FirstName) + ' ' + RTRIM(LastName) AS Name  
FROM DimEmployee   
WHERE DepartmentName = @dept;  

L.L. ローカル変数に対して複合代入を使用するUsing a compound assignment for a local variable

次の 2 つの例では、同じ結果が生成されます。The following two examples produce the same result. どちらも @NewBalance というローカル変数を作成し、その値に 10 を乗算して、SELECT ステートメントでローカル変数の新しい値を表示します。They create a local variable named @NewBalance, multiplies it by 10 and displays the new value of the local variable in a SELECT statement. 2 番目の例では、複合代入演算子を使用します。The second example uses a compound assignment operator.

/* Example one */  
DECLARE  @NewBalance  int ;  
SET  @NewBalance  =  10;  
SET  @NewBalance  =  @NewBalance  *  10;  
SELECT  TOP 1 @NewBalance FROM sys.tables;  
  
/* Example Two */  
DECLARE @NewBalance int = 10;  
SET @NewBalance *= 10;  
SELECT TOP 1 @NewBalance FROM sys.tables;  

M.M. クエリから値を代入するAssigning a value from a query

次の例では、クエリを使用して変数に値を代入します。The following example uses a query to assign a value to a variable.

-- Uses AdventureWorks  
  
DECLARE @rows int;  
SET @rows = (SELECT COUNT(*) FROM dbo.DimCustomer);  
SELECT TOP 1 @rows FROM sys.tables;  

参照See Also

複合演算子 (Transact-SQL) Compound Operators (Transact-SQL)
DECLARE @local_variable (Transact-SQL) DECLARE @local_variable (Transact-SQL)
EXECUTE (Transact-SQL) EXECUTE (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
SET ステートメント (Transact-SQL)SET Statements (Transact-SQL)