versiones tutorial sirve que para descargar caracteristicas sql sql-server sql-server-2005 tsql sql-server-2008

sql - tutorial - ¿SET versus SELECT al asignar variables?



sql server versiones (3)

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*/

¿Cuáles son las diferencias entre las SELECT SET y SELECT cuando se asignan variables en T-SQL?


Creo que SET es el estándar ANSI mientras que SELECT no lo es. También tenga en cuenta el comportamiento diferente de SET frente a SELECT en el siguiente ejemplo 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'' */


Quote , que resume de este artículo :

  1. SET es el estándar ANSI para la asignación de variables, SELECT no lo es.
  2. SET solo puede asignar una variable a la vez, SELECT puede hacer varias asignaciones a la vez.
  3. Si se asigna desde una consulta, SET solo puede asignar un valor escalar. Si la consulta devuelve múltiples valores / filas, SET generará un error. SELECT asignará uno de los valores a la variable y ocultará el hecho de que se devolvieron múltiples valores (por lo que es probable que nunca se sepa por qué algo salió mal en otra parte; diviértase al resolverlo)
  4. Al asignar desde una consulta si no se devuelve ningún valor, entonces SET asignará NULL, donde SELECT no realizará la asignación en absoluto (por lo que la variable no se cambiará de su valor anterior)
  5. En cuanto a las diferencias de velocidad, no hay diferencias directas entre SET y SELECT. Sin embargo, la capacidad de SELECT para realizar múltiples asignaciones en un disparo le da una ligera ventaja de velocidad sobre SET.