Can someone please identify the functional/performance differences, if any, between SET
and SELECT
in T-SQL? Under what conditions should I choose one over the other?
UPDATE:
Thanks to all who responded. As a few people pointed out, this article by Narayana Vyas Kondreddi has lots of good info. I also perused the net after reading the article and found this condensed version by Ryan Farley which offers the highlights and thought I would share them:
- SET is the ANSI standard forvariable assignment, SELECT is not.
- SET can only assign one variable ata time, SELECT can make multipleassignments at once.
- If assigning from a query, SET canonly assign a scalar value. If thequery returns multiple values/rowsthen SET will raise an error. SELECTwill assign one of the values to thevariable and hide the fact thatmultiple values were returned (soyou'd likely never know whysomething was going wrong elsewhere - have fun troubleshooting that one)
- When assigning from a query if thereis no value returned then SET willassign NULL, where SELECT will notmake the assignment at all (so thevariable will not be changed fromit's previous value)
- As far as speed differences - thereare no direct differences betweenSET and SELECT. However SELECT'sability to make multiple assignmentsin one shot does give it a slightspeed advantage over SET.