What is the better way (with regards to performance) to set a value to variable?
By
SET
command:DECLARE @VarString nvarchar(max); SET @VarString = 'john doe'; SELECT @VarString;
By
SELECT
command:DECLARE @VarString nvarchar(max); SELECT @VarString = 'john doe'; SELECT @VarString;
3 Answers 3
Don't pick one or the other strictly for performance.
Pick based on what fits your style and development needs, as is advised in the conclusion to this excellent comparison between SELECT
and SET
(emphasis and minor formatting added):
Best practice suggests not to stick to one method. Depending on the scenario you may want to use both
SET
orSELECT
.Following are few scenarios for using
SET
:
- If you are required to assign a single value directly to variable and no query is involved to fetch value
- NULL assignments are expected (
NULL
returned in result set)- Standards are meant to be follow for any planned migration
- Non scalar results are expected and are required to be handled
Using
SELECT
is efficient and flexible in the following few cases:
- Multiple variables are being populated by assigning values directly
- Multiple variables are being populated by single source (table , view)
- Less coding for assigning multiple variables
- Use this if you need to get
@@ROWCOUNT
and@ERROR
for last statement executed
I think the consensus is there's a negligible performance difference between the two (with SET
being faster). But if you are like me, I'd use SET
where appropriate for readability purposes. The next guy who will maintain your code will thank you for that ;-)
-
1Can you post benchmarks proving that SET is faster?A-K– A-K2012年05月11日 21:12:21 +00:00Commented May 11, 2012 at 21:12
-
Alex, please take a look at this as an example stackoverflow.com/questions/189588/…MarlonRibunal– MarlonRibunal2012年05月11日 21:16:09 +00:00Commented May 11, 2012 at 21:16
-
Marlon, that report gives inconclusive results. Note that half-way down the poster notes that: "Oddly, if you crank the number of runs up to say, 10, the SET begins to lag behind."Nick Chammas– Nick Chammas2012年05月11日 21:40:21 +00:00Commented May 11, 2012 at 21:40
-
That's the reason why my answer is leaning towards "readability purposes". The use case scenario in your answer are great points.MarlonRibunal– MarlonRibunal2012年05月11日 21:53:49 +00:00Commented May 11, 2012 at 21:53
I always use SET unless I am populating multiple variables from the result set of 1 query. That way, by using SELECT we only query the table once.
Explore related questions
See similar questions with these tags.
SELECT
is faster when assigning values to multiple variables at once. Otherwise, the performance difference is negligible.SET
is faster, then half-way down he adds: "Oddly, if you crank the number of runs up to say, 10, theSET
begins to lag behind."