¿ESTABLECER versus SELECCIONAR al asignar variables?
¿Cuáles son las diferencias entre las sentencias SET
y SELECT
al asignar variables en T-SQL?
249
Author: Nima Derakhshanjan, 2010-10-15
3 answers
Cita , que resume de este artículo :
- SET es el estándar ANSI para la asignación de variables, SELECT no lo es.
- SET solo puede asignar una variable a la vez, SELECT puede realizar varias asignaciones a la vez.
- Si se asigna desde una consulta, SET solo puede asignar un valor escalar. Si la consulta devuelve varios valores/filas, SET generará un error. SELECT asignará uno de los valores a la variable y ocultará el hecho de que múltiples los valores fueron devueltos (por lo que probablemente nunca sabría por qué algo iba mal en otro lugar - diviértete solucionando ese problema)
- Al asignar desde una consulta si no se devuelve ningún valor, SET asignará NULL, donde SELECT no hará la asignación en absoluto (por lo que la variable no cambiará de su valor anterior)
- En cuanto a las diferencias de velocidad - no hay diferencias directas entre SET y SELECT. Sin embargo, la capacidad de SELECT para realizar varias asignaciones en una sola toma le da una ligera ventaja de velocidad sobre SET.
364
Author: OMG Ponies,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-05 16:30:22
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-05 16:30:22
Creo que SET
es el estándar ANSI, mientras que el SELECT
no lo es. También tenga en cuenta el comportamiento diferente de SET
vs. SELECT
en el ejemplo siguiente cuando no se encuentra un valor.
declare @var varchar(20)
set @var = 'Joe'
set @var = (select name from master.sys.tables where name = 'qwerty')
select @var /* @var is now NULL */
set @var = 'Joe'
select @var = name from master.sys.tables where name = 'qwerty'
select @var /* @var is still equal to 'Joe' */
132
Author: Joe Stefanelli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-15 19:28:22
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-15 19:28:22
Al escribir consultas, esta diferencia debe tenerse en cuenta:
DECLARE @A INT = 2
SELECT @A = TBL.A
FROM ( SELECT 1 A ) TBL
WHERE 1 = 2
SELECT @A
/* @A is 2*/
---------------------------------------------------------------
DECLARE @A INT = 2
SET @A = (
SELECT TBL.A
FROM ( SELECT 1 A) TBL
WHERE 1 = 2
)
SELECT @A
/* @A is null*/
22
Author: GorkemHalulu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-03 06:35:33
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-03 06:35:33