SET @local_variable (Transact-SQL)
Establece en el valor especificado la variable local indicada, creada previamente con la instrucción DECLARE @local_variable.
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 ] ] } ]
}
}
}
Después de declarada una variable, esta se inicializa como NULL. Puede usar la instrucción SET para asignar a una variable declarada un valor distinto de NULL. La instrucción SET que asigna un valor a la variable devuelve un solo valor. Cuando inicialice varias variables, utilice una instrucción SET distinta para cada variable local.
Las variables solo se pueden utilizar en expresiones y no en lugar de nombres de objeto o palabras clave. Para formar instrucciones Transact-SQL dinámicas, utilice EXECUTE.
Las reglas de sintaxis de SET @cursor_variable no incluyen las palabras clave LOCAL y GLOBAL. Si se utiliza la sintaxis SET @cursor_variable = CURSOR…, el cursor se crea como GLOBAL o LOCAL en función del valor de la opción de valor predeterminado de cursores locales de la base de datos.
Las variables de cursor son siempre locales, incluso cuando hacen referencia a un cursor global. Cuando una variable de cursor hace referencia a un cursor global, éste tiene a la vez una referencia de cursor global y otra local. Para obtener más información, vea el ejemplo C.
Para obtener más información, vea DECLARE CURSOR (Transact-SQL).
Se 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.
A. Imprimir el valor de una variable inicializada con SET
En el ejemplo siguiente se crea la variable @myvar, se le asigna un valor de cadena y se imprime el valor de @myvar .
DECLARE @myvar char(20); SET @myvar = 'This is a test'; SELECT @myvar; GO
B. Utilizar en una instrucción SELECT una variable local a la que se ha asignado un valor con SET
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.
USE AdventureWorks; GO DECLARE @state char(25); SET @state = N'Oregon'; SELECT RTRIM(FirstName) + ' ' + RTRIM(LastName) AS Name, City FROM HumanResources.vEmployee WHERE StateProvinceName = @state;
C. Utilizar una asignación compuesta para una variable local
Los dos ejemplos los siguientes producen el mismo resultado. Crean una variable local denominada @NewBalance, la multiplican por 10 y muestran el nuevo valor de la variable local en una instrucción SELECT. El segundo ejemplo utiliza a un operador de asignación compuesta.
/* 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. Utilizar SET con un cursor global
En el ejemplo siguiente se crea una variable local y después se establece en la variable de cursor el nombre del cursor global.
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. Definir un cursor con SET
En el ejemplo siguiente se usa la instrucción SET para definir un cursor.
DECLARE @CursorVar CURSOR;
SET @CursorVar = CURSOR SCROLL DYNAMIC
FOR
SELECT LastName, FirstName
FROM AdventureWorks.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. Asignar un valor desde una consulta
En el ejemplo siguiente se utiliza una consulta para asignar un valor a una variable.
USE AdventureWorks; GO DECLARE @rows int; SET @rows = (SELECT COUNT(*) FROM Sales.Customer); SELECT @rows;
G. Asignar un valor a una variable de tipo definido por el usuario mediante la modificación de una propiedad del tipo
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.
DECLARE @p Point; SET @p.X = @p.X + 1.1; SELECT @p; GO
H. Asignar un valor a una variable de tipo definido por el usuario mediante la invocación de un método del tipo
El ejemplo siguiente establece un valor para el tipo definido por el usuario point a través de la invocación del método SetXY del tipo.
DECLARE @p Point; SET @p=point.SetXY(23.5, 23.5);
I. Crear una variable para un tipo CLR y llamar a un método mutador
En el ejemplo siguiente se crea una variable para el tipo Point y, a continuación, se ejecuta un método mutador en 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);
