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

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure simAzure Synapse Analytics (SQL DW) simParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Define a variável local especificada, criada anteriormente com a instrução DECLARE @local_variable, com o valor especificado.Sets the specified local variable, previously created by using the DECLARE @local_variable statement, to the specified value.

Ícone de link do tópico Convenções da sintaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

Sintaxe do SQL Server e do Banco de Dados SQL do Azure: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 ] ] } ]   
      }   
    }  
}   

Sintaxe do SQL Data Warehouse do Azure e do Parallel Data Warehouse:Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse:

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

ArgumentosArguments

@ local_variable@ local_variable
O nome de uma variável de qualquer tipo, exceto cursor, text, ntext, image ou table.The name of a variable of any type except cursor, text, ntext, image, or table. Os nomes de variável devem começar com um sinal de arroba ( @ ).Variable names must start with one at sign (@). Os nomes de variável precisam seguir as regras para identificadores.Variable names must follow the rules for identifiers.

property_nameproperty_name
Uma propriedade de um tipo definido pelo usuário.A property of a user-defined type.

field_namefield_name
Um campo público de um tipo definido pelo usuário.A public field of a user-defined type.

udt_nameudt_name
O nome de um tipo de dados CLR (Common Language Runtime) definido pelo usuário.The name of a common language runtime (CLR) user-defined type.

{ . | :: }
Especifica um método de um tipo de dados CLR definido pelo usuário.Specifies a method of a CLR user-define type. Para um método de instância (não estático), use um ponto ( . ).For an instance (non-static) method, use a period (.). Para um método estático, use dois sinais de dois-pontos ( :: ).For a static method, use two colons (::). Para invocar um método, uma propriedade ou um campo de um tipo de dados CLR definido pelo usuário, você deve ter a permissão EXECUTE no tipo.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 ] )
Um método de um tipo definido pelo usuário que obtém um ou mais argumentos para modificar o estado de uma instância de um tipo.A method of a user-defined type that takes one or more arguments to modify the state of an instance of a type. Os métodos estáticos devem ser públicos.Static methods must be public.

@ SQLCLR_local_variable@ SQLCLR_local_variable
Uma variável cujo tipo está localizado em um assembly.A variable whose type is located in an assembly. Para obter mais informações, consulte Conceitos de programação da Integração CLR (Common Language Runtime).For more information, see Common Language Runtime (CLR) Integration Programming Concepts.

mutator_methodmutator_method
Um método no assembly que pode alterar o estado do objeto.A method in the assembly that can change the state of the object. SQLMethodAttribute.IsMutator é aplicado a este método.SQLMethodAttribute.IsMutator is applied to this method.

{ += | -= | *= | /= | %= | &= | ^= | |= }
Operador de atribuição composto:Compound assignment operator:

+= Adicionar e atribuir+= Add and assign

-= Subtrair e atribuir-= Subtract and assign

*= Multiplicar e atribuir*= Multiply and assign

/= Dividir e atribuir/= Divide and assign

%= Módulo e atribuir%= Modulo and assign

&= AND bit a bit e atribuir&= Bitwise AND and assign

^= XOR bit a bit e atribuir^= Bitwise XOR and assign

|= OR bit a bit e atribuir|= Bitwise OR and assign

expressãoexpression
Qualquer expression válida.Any valid expression.

cursor_variablecursor_variable
O nome de uma variável de cursor.The name of a cursor variable. Se a variável de cursor de destino tiver mencionado anteriormente um cursor diferente, essa referência anterior será removida.If the target cursor variable previously referenced a different cursor, that previous reference is removed.

cursor_namecursor_name
O nome de um cursor declarado usando a instrução DECLARE CURSOR.The name of a cursor declared by using the DECLARE CURSOR statement.

CURSORCURSOR
Especifica que a instrução SET contém uma declaração de um cursor.Specifies that the SET statement contains a declaration of a cursor.

SCROLLSCROLL
Especifica que o cursor dá suporte a todas as opções de fetch: FIRST, LAST, NEXT, PRIOR, RELATIVE e ABSOLUTE.Specifies that the cursor supports all fetch options: FIRST, LAST, NEXT, PRIOR, RELATIVE, and ABSOLUTE. Não é possível especificar SCROLL quando também tiver especificado FAST_FORWARD.You can't specify SCROLL when you've also specified FAST_FORWARD.

FORWARD_ONLYFORWARD_ONLY
Especifica que o cursor oferece suporte somente para a opção FETCH NEXT.Specifies that the cursor supports only the FETCH NEXT option. O cursor é recuperado somente em uma direção, da primeira para a última linha.The cursor is retrieved only in one direction, from the first to the last row. Quando FORWARD_ONLY é especificado sem as palavras-chave STATIC, KEYSET ou DYNAMIC, o cursor é implementado como DYNAMIC.When you specify FORWARD_ONLY without the STATIC, KEYSET, or DYNAMIC keywords, the cursor is implemented as DYNAMIC. Se FORWARD_ONLY ou SCROLL não forem especificados, FORWARD_ONLY será o padrão, a não ser que as palavras-chave STATIC, KEYSET ou DYNAMIC sejam especificadas.If you don't specify either FORWARD_ONLY or SCROLL, FORWARD_ONLY is the default, unless you specify the keywords STATIC, KEYSET, or DYNAMIC. Para os cursores STATIC, KEYSET e DYNAMIC, SCROLL é o padrão.For STATIC, KEYSET, and DYNAMIC cursors, SCROLL is the default.

STATICSTATIC
Define um cursor que faz uma cópia temporária dos dados a serem usados por ele.Defines a cursor that makes a temporary copy of the data to be used by the cursor. Todas as solicitações para o cursor são respondidas dessa tabela temporária em tempdb.All requests to the cursor are answered from this temporary table in tempdb. Como resultado, as modificações feitas nas tabelas base, depois que o cursor é aberto, não são refletidas nos dados retornados pelas buscas feitas para o cursor.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. E esse cursor não dá suporte a modificações.And, this cursor doesn't support modifications.

KEYSETKEYSET
Especifica que a associação e a ordem de linhas no cursor são fixas, quando o cursor é aberto.Specifies that the membership and order of rows in the cursor are fixed when the cursor is opened. O conjunto de chaves que identifica exclusivamente as linhas é criado na tabela keysettable no tempdb.The set of keys that uniquely identify the rows is built into the keysettable in tempdb. Alterações em valores não chave nas tabelas base, realizadas pelo proprietário do cursor ou confirmadas por outros usuários, são visíveis como rolagens do proprietário ao redor do cursor.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. As inserções feitas por outros usuários não são visíveis e não é possível fazer inserções por um cursor de servidor Transact-SQLTransact-SQL.Inserts made by other users aren't visible, and inserts can't be made through a Transact-SQLTransact-SQL server cursor.

Se uma linha é excluída, uma tentativa de buscá-la retorna um @@FETCH_STATUS igual a -2.If a row is deleted, an attempt to fetch the row returns an @@FETCH_STATUS of -2. As atualizações de valores de chave externas ao cursor são similares à exclusão de uma linha antiga, seguida de uma inserção de uma nova linha.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. A linha com os novos valores não é visível e as tentativas de buscar a linha com os valores antigos retornam um @@FETCH_STATUS igual a -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. Os novos valores ficarão visíveis se a atualização for feita pelo cursor, especificando a cláusula WHERE CURRENT OF.The new values are visible if the update happens through the cursor by specifying the WHERE CURRENT OF clause.

DYNAMICDYNAMIC
Define um cursor que reflete todas as mudanças de dados feitas nas linhas no seu conjunto de resultados conforme o proprietário rola o cursor.Defines a cursor that reflects all data changes made to the rows in its result set as the cursor owner scrolls around the cursor. Os valores de dados, a ordem e a associação das linhas podem ser alterados em cada busca.The data values, order, and membership of the rows can change on each fetch. As opções de busca absoluta e relativa não têm suporte em cursores dinâmicos.The absolute and relative fetch options aren't supported with dynamic cursors.

FAST_FORWARDFAST_FORWARD
Especifica um cursor FORWARD_ONLY, READ_ONLY, com otimizações habilitadas.Specifies a FORWARD_ONLY, READ_ONLY cursor with optimizations enabled. FAST_FORWARD não pode ser especificado quando SCROLL também está especificado.FAST_FORWARD can't be specified when SCROLL is also specified.

READ_ONLYREAD_ONLY
Impede que esse cursor faça atualizações.Prevents updates from being made through this cursor. O cursor não pode ser referenciado em uma cláusula WHERE CURRENT OF em uma instrução UPDATE ou DELETE.The cursor can't be referenced in a WHERE CURRENT OF clause in an UPDATE or DELETE statement. Essa opção anula a funcionalidade padrão de um cursor para ser atualizado.This option overrides the default capability of a cursor to be updated.

SCROLL LOCKSSCROLL LOCKS
Especifica se atualizações posicionadas ou exclusões feitas pelo cursor têm garantia de êxito.Specifies that positioned updates or deletes made through the cursor are guaranteed to succeed. O SQL ServerSQL Server bloqueia as linhas à medida que são lidas no cursor para garantir a disponibilidade para modificações posteriores.SQL ServerSQL Server locks the rows as they're read into the cursor to guarantee their availability for later modifications. SCROLL_LOCKS não pode ser especificado quando FAST_FORWARD também está especificado.You can't specify SCROLL_LOCKS when FAST_FORWARD is also specified.

OPTIMISTICOPTIMISTIC
Especifica que as atualizações posicionadas e exclusões realizadas pelo cursor não terão êxito se a linha tiver sido atualizada desde que foi lida no cursor.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 não bloqueia linhas à medida que são lidas no cursor.doesn't lock rows as they're read into the cursor. Em vez disso, ele usará comparações de valores da coluna de carimbo de data/hora ou um valor de soma de verificação, se a tabela não tiver nenhuma coluna de carimbo de data/hora, para determinar se a linha foi modificada depois de lida no cursor.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. Se a linha tiver sido modificada, a tentativa de atualização ou exclusão posicionada falhará.If the row was modified, the attempted positioned update or delete fails. OPTIMISTIC não poderá ser especificado quando FAST_FORWARD também estiver especificado.You can't specify OPTIMISTIC when FAST_FORWARD is also specified.

TYPE_WARNINGTYPE_WARNING
Especifica que uma mensagem de aviso é enviada ao cliente quando o cursor é convertido implicitamente em outro a partir do tipo solicitado.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
É uma instrução SELECT padrão que define o conjunto de resultados de um cursor.Is a standard SELECT statement that defines the result set of the cursor. As palavras-chave FOR BROWSE e INTO não são permitidas em select_statement de uma declaração de cursor.The keywords FOR BROWSE, and INTO aren't allowed within the select_statement of a cursor declaration.

Se DISTINCT, UNION, GROUP BY ou HAVING forem usados ou uma expressão de agregação for incluída em select_list, o cursor será criado como 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.

Se cada tabela subjacente não tiver um índice exclusivo e um cursor ISO SCROLL ou um cursor Transact-SQLTransact-SQL KEYSET for solicitado, ele será automaticamente um cursor 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.

Se select_statement contiver uma cláusula ORDER BY na qual as colunas não são identificadores de linha exclusivos, um cursor DYNAMIC será convertido em um cursor KEYSET ou em um cursor STATIC, caso não seja possível abrir um cursor KEYSET.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. Isto também acontece para um cursor definido usando a sintaxe ISO, mas sem a palavra-chave STATIC.This process also occurs for a cursor defined by using ISO syntax but without the STATIC keyword.

READ ONLYREAD ONLY
Impede que esse cursor faça atualizações.Prevents updates from being made through this cursor. O cursor não pode ser referenciado em uma cláusula WHERE CURRENT OF em uma instrução UPDATE ou DELETE.The cursor can't be referenced in a WHERE CURRENT OF clause in an UPDATE or DELETE statement. Essa opção anula a funcionalidade padrão de um cursor para ser atualizado.This option overrides the default capability of a cursor to be updated. Essa palavra-chave é diferente do READ_ONLY anterior, pois tem um espaço em vez de um sublinhado entre READ e 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 ] ]
Define colunas atualizáveis em um cursor.Defines updatable columns within the cursor. Se OF column_name [ , ...n] for fornecido, somente as colunas listadas permitirão modificações.If OF column_name [,...n] is supplied, only the columns listed allow modifications. Quando nenhuma lista for fornecida, todas as colunas poderão ser atualizadas, a menos que o cursor tenha sido definido como READ_ONLY.When no list is supplied, all columns can be updated, unless the cursor has been defined as READ_ONLY.

ComentáriosRemarks

Depois de uma variável ser declarada, ela é inicializada como NULL.After a variable is declared, it's initialized to NULL. Use a instrução SET para atribuir um valor que não é NULL a uma variável declarada.Use the SET statement to assign a value that isn't NULL to a declared variable. A instrução SET que atribui um valor à variável retorna um único valor.The SET statement that assigns a value to the variable returns a single value. Ao inicializar várias variáveis, use uma instrução SET separada para cada variável local.When you initialize multiple variables, use a separate SET statement for each local variable.

As variáveis podem ser usadas somente em expressões, não em nomes de objeto ou palavras-chave.You can use variables only in expressions, not instead of object names or keywords. Para construir instruções Transact-SQLTransact-SQL dinâmicas, use EXECUTE.To construct dynamic Transact-SQLTransact-SQL statements, use EXECUTE.

As regras de sintaxe para SET @ cursor_variable não incluem as palavras-chave LOCAL e GLOBAL.The syntax rules for SET @cursor_variable don't include the LOCAL and GLOBAL keywords. Quando a sintaxe SET @ cursor_variable = CURSOR... é usada, o cursor é criado como GLOBAL ou LOCAL, dependendo da configuração padrão da opção de banco de dados do cursor 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.

As variáveis de cursor sempre são locais, mesmo se fizerem referência a um cursor global.Cursor variables are always local, even if they reference a global cursor. Quando uma variável de cursor faz referência a um cursor global, o cursor tem as duas referências, uma global e uma local.When a cursor variable references a global cursor, the cursor has both a global and a local cursor reference. Para obter mais informações, veja o Exemplo C.For more information, see Example C.

Para obter mais informações, consulte DECLARE CURSOR (Transact-SQL).For more information, see DECLARE CURSOR (Transact-SQL).

O operador de atribuição composto pode ser usado em qualquer lugar em que haja uma atribuição com uma expressão à direita do operador, incluindo variáveis, e uma instrução SET em uma instrução UPDATE, SELECT e RECEIVE.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.

Não use uma variável em uma instrução SELECT para concatenar valores (ou seja, para computar valores agregados).Don't use a variable in a SELECT statement to concatenate values (that is, to compute aggregate values). Resultados inesperados de consulta podem ocorrer.Unexpected query results may occur. Porque todas as expressões na lista SELECT (incluindo atribuições) não são necessariamente executadas exatamente uma vez para cada linha de saída.Because, all expressions in the SELECT list (including assignments) aren't necessarily run exactly once for each output row. Para obter mais informações, consulte o este artigo da base de dados.For more information, see this KB article.

PermissõesPermissions

Requer associação à função public.Requires membership in the public role. Todos os usuários podem usar SET @ local_variable.All users can use SET @local_variable.

ExemplosExamples

a.A. Imprimindo o valor de uma variável inicializada com a instrução SETPrinting the value of a variable initialized by using SET

O exemplo a seguir cria a variável @myvar, coloca um valor de cadeia de caracteres na variável e imprime o valor da variável @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. Usando uma variável local que atribuiu um valor usando a instrução SET em uma instrução SELECTUsing a local variable assigned a value by using SET in a SELECT statement

O exemplo a seguir cria uma variável local chamada @state e usa essa variável local em uma instrução SELECT para localizar o nome e o sobrenome de todos os funcionários que moram no estado de 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. Usando uma atribuição composta para uma variável localUsing a compound assignment for a local variable

Os dois exemplos a seguir produzem o mesmo resultado.The following two examples produce the same result. Eles criam uma variável local chamada @NewBalance, multiplicam-na por 10 e exibem o novo valor da variável local em uma instrução 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. O segundo exemplo usa um operador de atribuição composto.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. Usando SET com um cursor globalUsing SET with a global cursor

O exemplo a seguir cria uma variável local e define a variável de cursor como o nome de cursor global.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. Definindo um cursor com a instrução SETDefining a cursor by using SET

O exemplo a seguir usa a instrução SET para definir um cursor.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. Atribuindo um valor de uma consultaAssigning a value from a query

O exemplo a seguir usa uma consulta para atribuir um valor a uma variável.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. Atribuindo um valor a uma variável de tipo definido pelo usuário com a modificação de uma propriedade do tipoAssigning a value to a user-defined type variable by modifying a property of the type

O exemplo a seguir define o valor para o tipo Point definido pelo usuário modificando o valor da propriedade X do tipo.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. Atribuindo um valor a uma variável de tipo definida com a invocação de um método do tipoAssigning a value to a user-defined type variable by invoking a method of the type

O exemplo a seguir define um valor para o tipo point definido pelo usuário por meio da invocação do método SetXY do tipo.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. Criando uma variável para um tipo CLR e chamando um método modificadorCreating a variable for a CLR type and calling a mutator method

O exemplo a seguir cria uma variável para o tipo Point e, depois, executa um método modificador em 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);  

Exemplos: Azure Synapse Analytics (SQL DW)Azure Synapse Analytics (SQL DW) e Parallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse Analytics (SQL DW)Azure Synapse Analytics (SQL DW) and Parallel Data WarehouseParallel Data Warehouse

J.J. Imprimindo o valor de uma variável inicializada com a instrução SETPrinting the value of a variable initialized by using SET

O exemplo a seguir cria a variável @myvar, coloca um valor de cadeia de caracteres na variável e imprime o valor da variável @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. Usando uma variável local que atribuiu um valor usando a instrução SET em uma instrução SELECTUsing a local variable assigned a value by using SET in a SELECT statement

O exemplo a seguir cria uma variável local chamada @dept e usa essa variável em uma instrução SELECT para localizar o nome e o sobrenome de todos os funcionários que trabalham no departamento 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. Usando uma atribuição composta para uma variável localUsing a compound assignment for a local variable

Os dois exemplos a seguir produzem o mesmo resultado.The following two examples produce the same result. Eles criam uma variável local chamada @NewBalance, multiplicam-na por 10 e exibem o novo valor da variável local em uma instrução 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. O segundo exemplo usa um operador de atribuição composto.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. Atribuindo um valor de uma consultaAssigning a value from a query

O exemplo a seguir usa uma consulta para atribuir um valor a uma variável.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;  

Consulte TambémSee Also

Operadores compostos (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)
Instruções SET (Transact-SQL)SET Statements (Transact-SQL)