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

SE APLICA A: síSQL Server síAzure SQL Database síAzure Synapse Analytics (SQL DW) síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Establece en el valor especificado la variable local indicada, creada previamente con la instrucción DECLARE @local_variable.Sets the specified local variable, previously created by using the DECLARE @local_variable statement, to the specified value.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

Sintaxis de SQL Server y 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 ] ] } ]   
      }   
    }  
}   

Sintaxis para Azure SQL Data Warehouse y Almacenamiento de datos paralelos:Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse:

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

ArgumentosArguments

@ local_variable@ local_variable
El nombre de una variable de cualquier tipo, excepto cursor, text, ntext, image o table.The name of a variable of any type except cursor, text, ntext, image, or table. Los nombres de variables deben comenzar por un signo de arroba ( @ ).Variable names must start with one at sign (@). Los nombres de las variables deben seguir las reglas de los identificadores.Variable names must follow the rules for identifiers.

property_nameproperty_name
El nombre de una propiedad definida por el usuario.A property of a user-defined type.

field_namefield_name
Un campo público de un tipo definido por el usuario.A public field of a user-defined type.

udt_nameudt_name
El nombre de un tipo definido por el usuario CLR (Common Language Runtime).The name of a common language runtime (CLR) user-defined type.

{ . | :: }
Especifica el método de un tipo definido por el usuario CLR.Specifies a method of a CLR user-define type. En métodos de instancia (no estáticos), use un punto ( . ).For an instance (non-static) method, use a period (.). En métodos estáticos, use dos puntos dobles ( :: ).For a static method, use two colons (::). Para invocar un método, propiedad o campo de un tipo definido por el usuario CLR, debe tener el permiso EXECUTE para el 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 ] )
Un método de un tipo definido por el usuario que toma uno o más argumentos para modificar el estado de la instancia de un tipo.A method of a user-defined type that takes one or more arguments to modify the state of an instance of a type. Los métodos estáticos deben ser públicos.Static methods must be public.

@ SQLCLR_local_variable@ SQLCLR_local_variable
Una variable cuyo tipo se encuentra en un ensamblado.A variable whose type is located in an assembly. Para obtener más información, consulte Conceptos de programación en el ámbito de la integración de Common Language Runtime (CLR).For more information, see Common Language Runtime (CLR) Integration Programming Concepts.

mutator_methodmutator_method
Un método del ensamblado que puede cambiar el estado del objeto.A method in the assembly that can change the state of the object. SQLMethodAttribute.IsMutator se aplica a este método.SQLMethodAttribute.IsMutator is applied to this method.

{ += | -= | *= | /= | %= | &= | ^= | |= }
Operador de asignación compuesta:Compound assignment operator:

+= Sumar y asignar+= Add and assign

-= Restar y asignar-= Subtract and assign

*= Multiplicar y asignar*= Multiply and assign

/= Dividir y asignar/= Divide and assign

%= Módulo y asignar%= Modulo and assign

&= AND bit a bit y asignar&= Bitwise AND and assign

^= XOR bit a bit y asignar^= Bitwise XOR and assign

|= OR bit a bit y asignar|= Bitwise OR and assign

expressionexpression
Cualquier expression válida.Any valid expression.

cursor_variablecursor_variable
Nombre de una variable de cursor.The name of a cursor variable. Si la variable de cursor de destino indicada anteriormente hacía referencia a un cursor diferente, esa referencia se pierde.If the target cursor variable previously referenced a different cursor, that previous reference is removed.

cursor_namecursor_name
El nombre de un cursor declarado con la instrucción DECLARE CURSOR.The name of a cursor declared by using the DECLARE CURSOR statement.

CURSORCURSOR
Especifica que la instrucción SET contiene una declaración de un cursor.Specifies that the SET statement contains a declaration of a cursor.

SCROLLSCROLL
Especifica que el cursor admite todas las opciones de captura: FIRST, LAST, NEXT, PRIOR, RELATIVE y ABSOLUTE.Specifies that the cursor supports all fetch options: FIRST, LAST, NEXT, PRIOR, RELATIVE, and ABSOLUTE. No puede especificar SCROLL si también ha especificado FAST_FORWARD.You can't specify SCROLL when you've also specified FAST_FORWARD.

FORWARD_ONLYFORWARD_ONLY
Especifica que el cursor solo admite la opción FETCH NEXT.Specifies that the cursor supports only the FETCH NEXT option. El cursor solo se recupera en una dirección, desde la primera fila hacia la última.The cursor is retrieved only in one direction, from the first to the last row. Si especifica FORWARD_ONLY sin las palabras clave STATIC, KEYSET o DYNAMIC, el cursor se implementa como DYNAMIC.When you specify FORWARD_ONLY without the STATIC, KEYSET, or DYNAMIC keywords, the cursor is implemented as DYNAMIC. Si no especifica FORWARD_ONLY ni SCROLL, FORWARD_ONLY es la opción predeterminada, salvo que incluya las palabras clave STATIC, KEYSET o DYNAMIC.If you don't specify either FORWARD_ONLY or SCROLL, FORWARD_ONLY is the default, unless you specify the keywords STATIC, KEYSET, or DYNAMIC. Los cursores STATIC, KEYSET y DYNAMIC toman como valor predeterminado SCROLL.For STATIC, KEYSET, and DYNAMIC cursors, SCROLL is the default.

STATICSTATIC
Define un cursor que hace una copia temporal de los datos que utiliza.Defines a cursor that makes a temporary copy of the data to be used by the cursor. Todas las solicitudes al cursor se responden desde esta tabla temporal de tempdb.All requests to the cursor are answered from this temporary table in tempdb. Como resultado, las modificaciones realizadas en las tablas base una vez abierto el cursor no se reflejan en los datos devueltos por capturas hechas al 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. Y este cursor no admite modificaciones.And, this cursor doesn't support modifications.

KEYSETKEYSET
Especifica que la pertenencia y el orden de las filas del cursor se fijan cuando se abre este cursor.Specifies that the membership and order of rows in the cursor are fixed when the cursor is opened. El conjunto de claves que identifica de forma única las filas está integrado en la tabla keyset de tempdb.The set of keys that uniquely identify the rows is built into the keysettable in tempdb. Los cambios efectuados en valores que no sean claves de las tablas base, ya sean realizados por el propietario del cursor o confirmados por otros usuarios, son visibles cuando el propietario del cursor se desplaza por el 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. Las inserciones realizadas por otros usuarios no son visibles y no es posible hacer inserciones a través de un 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.

Si se elimina una fila, un intento para capturar la fila devuelve un @@FETCH_STATUS de -2.If a row is deleted, an attempt to fetch the row returns an @@FETCH_STATUS of -2. Las actualizaciones de valores de clave desde fuera del cursor son similares a la eliminación de la fila anterior seguida por la inserción de la nueva fila.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. La fila con los nuevos valores no está visible y los intentos de capturar la fila con los valores anteriores devuelven un @@FETCH_STATUS de -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. Los nuevos valores están visibles si la actualización tiene lugar a través del cursor especificando la 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 un cursor que refleja en su conjunto de resultados todos los cambios realizados en los datos de las filas cuando el propietario del cursor se desplaza por éste.Defines a cursor that reflects all data changes made to the rows in its result set as the cursor owner scrolls around the cursor. Los valores de los datos, el orden y la pertenencia de las filas pueden cambiar en cada captura.The data values, order, and membership of the rows can change on each fetch. Las opciones de captura absoluta y relativa no se pueden utilizar en los cursores dinámicos.The absolute and relative fetch options aren't supported with dynamic cursors.

FAST_FORWARDFAST_FORWARD
Especifica un cursor FORWARD_ONLY, READ_ONLY con las optimizaciones habilitadas.Specifies a FORWARD_ONLY, READ_ONLY cursor with optimizations enabled. No es posible especificar FAST_FORWARD si también se incluye SCROLL.FAST_FORWARD can't be specified when SCROLL is also specified.

READ_ONLYREAD_ONLY
Impide que se realicen actualizaciones a través de este cursor.Prevents updates from being made through this cursor. No es posible hacer referencia al cursor en una cláusula WHERE CURRENT OF de una instrucción UPDATE o DELETE.The cursor can't be referenced in a WHERE CURRENT OF clause in an UPDATE or DELETE statement. Esta opción reemplaza la capacidad predeterminada de actualizar el cursor.This option overrides the default capability of a cursor to be updated.

SCROLL LOCKSSCROLL LOCKS
Especifica que existan garantías de que las actualizaciones o las cancelaciones posicionadas realizadas a través del cursor se lleven a cabo correctamente.Specifies that positioned updates or deletes made through the cursor are guaranteed to succeed. SQL ServerSQL Server bloquea las filas mientras se leen en el cursor para garantizar su disponibilidad en modificaciones posteriores.locks the rows as they're read into the cursor to guarantee their availability for later modifications. No puede especificar SCROLL_LOCKS si se incluye también FAST_FORWARD.You can't specify SCROLL_LOCKS when FAST_FORWARD is also specified.

OPTIMISTICOPTIMISTIC
Especifica que las actualizaciones o las cancelaciones posicionadas realizadas a través del cursor no se lleven a cabo correctamente si la fila se actualizó desde su lectura en el 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 no bloquea las filas cuando se leen en el cursor.doesn't lock rows as they're read into the cursor. En su lugar, utiliza comparaciones de valores de columna timestamp o un valor de suma de comprobación si la tabla no tiene columnas timestamp, para determinar si la fila se modificó tras su lectura en el 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. Si la fila se ha modificado, la actualización o eliminación posicionada fracasa.If the row was modified, the attempted positioned update or delete fails. No puede especificar OPTIMISTIC si se incluye también FAST_FORWARD.You can't specify OPTIMISTIC when FAST_FORWARD is also specified.

TYPE_WARNINGTYPE_WARNING
Especifica que se envía un mensaje de advertencia al cliente si el cursor se convierte implícitamente del tipo solicitado a otro.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
Es una instrucción SELECT estándar que define el conjunto de resultados del cursor.Is a standard SELECT statement that defines the result set of the cursor. Las palabras clave FOR BROWSE e INTO no están permitidas en la instrucción select_statement de una declaración de cursor.The keywords FOR BROWSE, and INTO aren't allowed within the select_statement of a cursor declaration.

Si usa DISTINCT, UNION, GROUP BY o HAVING, o si incluye una expresión de agregado en select_list, el cursor se creará 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.

Si ninguna de las tablas subyacentes tiene un índice único y se solicita un cursor ISO SCROLL o Transact-SQLTransact-SQL KEYSET, el cursor será automáticamente un cursor de tipo 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.

Si select_statement contiene una cláusula ORDER BY y las columnas indicadas no son identificadores de fila únicos, los cursores DYNAMIC se convertirán en cursores KEYSET o en cursores STATIC, si no es posible abrir un 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. Este proceso también ocurre en el caso de un cursor definido con la sintaxis ISO, pero sin la palabra clave STATIC.This process also occurs for a cursor defined by using ISO syntax but without the STATIC keyword.

READ ONLYREAD ONLY
Impide que se realicen actualizaciones a través de este cursor.Prevents updates from being made through this cursor. No es posible hacer referencia al cursor en una cláusula WHERE CURRENT OF de una instrucción UPDATE o DELETE.The cursor can't be referenced in a WHERE CURRENT OF clause in an UPDATE or DELETE statement. Esta opción reemplaza la capacidad predeterminada de actualizar el cursor.This option overrides the default capability of a cursor to be updated. Esta palabra clave varía con respecto a la READ_ONLY anterior en que contiene un espacio en lugar de un carácter de subrayado entre READ y 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 las columnas actualizables en el cursor.Defines updatable columns within the cursor. Si se especifica OFcolumn_name [ , ...n], solo las columnas enumeradas admiten modificaciones.If OF column_name [,...n] is supplied, only the columns listed allow modifications. Si no se especifica ninguna lista, se podrán actualizar todas las columnas, a menos que el cursor se haya definido como READ_ONLY.When no list is supplied, all columns can be updated, unless the cursor has been defined as READ_ONLY.

NotasRemarks

Después de declarada una variable, esta se inicializa en NULL.After a variable is declared, it's initialized to NULL. Puede usar la instrucción SET para asignar a una variable declarada un valor distinto de NULL.Use the SET statement to assign a value that isn't NULL to a declared variable. La instrucción SET que asigna un valor a la variable devuelve un solo valor.The SET statement that assigns a value to the variable returns a single value. Cuando inicialice varias variables, utilice una instrucción SET distinta para cada variable local.When you initialize multiple variables, use a separate SET statement for each local variable.

Solo puede utilizar las variables en expresiones y no en lugar de nombres de objeto o palabras clave.You can use variables only in expressions, not instead of object names or keywords. Para formar instrucciones Transact-SQLTransact-SQL dinámicas, utilice EXECUTE.To construct dynamic Transact-SQLTransact-SQL statements, use EXECUTE.

Las reglas de sintaxis de SET @ variable_de_cursor no incluyen las palabras clave LOCAL y GLOBAL.The syntax rules for SET @cursor_variable don't include the LOCAL and GLOBAL keywords. Si usa la sintaxis SET @ variable_de_cursor = CURSOR..., el cursor se crea como GLOBAL o LOCAL, en función de la configuración del valor predeterminado en la opción de cursor local de la base de datos.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.

Las variables de cursor son siempre locales, incluso cuando hacen referencia a un cursor global.Cursor variables are always local, even if they reference a global cursor. Cuando una variable de cursor hace referencia a un cursor global, éste tiene a la vez una referencia de cursor global y otra local.When a cursor variable references a global cursor, the cursor has both a global and a local cursor reference. Para obtener más información, vea el ejemplo C.For more information, see Example C.

Para más información, vea DECLARE CURSOR (Transact-SQL).For more information, see DECLARE CURSOR (Transact-SQL).

Puede utilizar el operador de asignación compuesta en cualquier lugar donde haya una asignación con una expresión en el lado derecho del operador, incluso las variables, y un SET en una instrucción UPDATE, SELECT y 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.

No use una variable en una instrucción SELECT para concatenar valores (es decir, para calcular valores de agregado).Don't use a variable in a SELECT statement to concatenate values (that is, to compute aggregate values). Pueden producirse resultados de consulta inesperados.Unexpected query results may occur. Esto se debe a que no todas las expresiones de la lista de SELECT (incluidas las asignaciones) se ejecutan necesaria y exactamente una vez por cada fila de salida.Because, all expressions in the SELECT list (including assignments) aren't necessarily run exactly once for each output row. Para más información, vea este artículo de KB.For more information, see this KB article.

PermisosPermissions

Debe pertenecer al rol public.Requires membership in the public role. Todos los usuarios pueden usar SET @ variable_local.All users can use SET @local_variable.

EjemplosExamples

A.A. Imprimir el valor de una variable inicializada con SETPrinting the value of a variable initialized by using SET

En el siguiente ejemplo se crea la variable @myvar, se le asigna un valor de cadena y se imprime el valor de @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. Utilizar en una instrucción SELECT una variable local a la que se ha asignado un valor con SETUsing a local variable assigned a value by using SET in a SELECT statement

En el ejemplo siguiente se crea una variable local llamada @state que después se usa en una instrucción SELECT para buscar todos los nombres y apellidos de los empleados residentes en el 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. Utilizar una asignación compuesta para una variable localUsing a compound assignment for a local variable

Los dos ejemplos los siguientes producen el mismo resultado.The following two examples produce the same result. Crean una variable local denominada @NewBalance, la multiplican por 10 y muestran el nuevo valor de la variable local en una instrucción 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. El segundo ejemplo utiliza a un operador de asignación compuesta.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. Utilizar SET con un cursor globalUsing SET with a global cursor

En el ejemplo siguiente se crea una variable local y después se establece en la variable de cursor el nombre del 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. Definir un cursor con SETDefining a cursor by using SET

En el ejemplo siguiente se usa la instrucción SET para definir un 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. Asignar un valor desde una consultaAssigning a value from a query

En el ejemplo siguiente se utiliza una consulta para asignar un valor a una variable.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. Asignar un valor a una variable de tipo definido por el usuario mediante la modificación de una propiedad del tipoAssigning a value to a user-defined type variable by modifying a property of the type

El ejemplo siguiente establece un valor para el tipo definido por el usuario Point a través de la modificación del valor de la propiedad X del 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. Asignar un valor a una variable de tipo definido por el usuario mediante la invocación de un método del tipoAssigning a value to a user-defined type variable by invoking a method of the type

En el siguiente ejemplo se establece un valor para el tipo definido por el usuario point a través de la invocación del método SetXY del 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. Crear una variable para un tipo CLR y llamar a un método mutadorCreating a variable for a CLR type and calling a mutator method

En el ejemplo siguiente se crea una variable para el tipo Point y, a continuación, se ejecuta un método mutador en 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);  

Ejemplos: Azure Synapse Analytics (SQL DW)Azure Synapse Analytics (SQL DW) y Almacenamiento de datos paralelosParallel Data WarehouseExamples: Azure Synapse Analytics (SQL DW)Azure Synapse Analytics (SQL DW) and Almacenamiento de datos paralelosParallel Data Warehouse

J.J. Imprimir el valor de una variable inicializada con SETPrinting the value of a variable initialized by using SET

En el siguiente ejemplo se crea la variable @myvar, se le asigna un valor de cadena y se imprime el valor de @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. Utilizar en una instrucción SELECT una variable local a la que se ha asignado un valor con SETUsing a local variable assigned a value by using SET in a SELECT statement

En el siguiente ejemplo se crea una variable local llamada @dept que después se usa en una instrucción SELECT para buscar el nombre y apellido de todos los empleados que trabajan en el departamento de 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. Utilizar una asignación compuesta para una variable localUsing a compound assignment for a local variable

Los dos ejemplos los siguientes producen el mismo resultado.The following two examples produce the same result. Crean una variable local denominada @NewBalance, la multiplican por 10 y muestran el nuevo valor de la variable local en una instrucción 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. El segundo ejemplo utiliza a un operador de asignación compuesta.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. Asignar un valor desde una consultaAssigning a value from a query

En el ejemplo siguiente se utiliza una consulta para asignar un valor a una variable.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 tambiénSee Also

Operadores compuestos (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)
Instrucciones SET (Transact-SQL)SET Statements (Transact-SQL)