Définir versus sélectionner lors de l'attribution des variables?
quelles sont les différences entre les énoncés SET
et SELECT
lors de l'attribution de variables en T-SQL?
249
demandé sur
Nima Derakhshanjan
2010-10-15 23:17:01
3 réponses
citation , qui résume de cet article :
- est la norme de norme ANSI pour l'attribution de la variable, SÉLECTIONNEZ ne l'est pas.
- SET ne peut assigner qu'une variable à la fois, SELECT peut faire plusieurs assignations à la fois.
- si vous assignez à partir d'une requête, SET ne peut assigner qu'une valeur scalaire. Si la requête renvoie plusieurs valeurs / lignes, alors la valeur sera générer une erreur. SELECT assignera une des valeurs à la variable et masquera le fait que plusieurs valeurs ont été retournées (de sorte que vous ne sauriez probablement jamais pourquoi quelque chose allait mal ailleurs - avoir du plaisir à résoudre celui-ci)
- lors de la cession d'une requête s'il n'y a pas de valeur retournée, SET assignera NULL, où SELECT ne fera pas la cession du tout (de sorte que la variable ne sera pas modifiée par rapport à sa valeur précédente)
- en ce qui concerne la vitesse différences-il n'y a pas de différences directes entre SET et SELECT. Toutefois, la capacité de SELECT de faire plusieurs affectations en un tir lui donne un léger avantage de vitesse sur SET.
364
répondu
OMG Ponies
2016-01-05 16:30:22
je crois que SET
est la norme de L'ANSI alors que SELECT
ne l'est pas. Notez également le comportement différent de SET
vs SELECT
dans l'exemple ci-dessous, lorsqu'une valeur n'est pas trouvée.
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
répondu
Joe Stefanelli
2010-10-15 19:28:22
lors de la rédaction de requêtes, cette différence doit être gardée à l'esprit:
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
répondu
GorkemHalulu
2015-09-03 06:35:33