Представьте, что у меня есть фрагмент кода инициализации в верхней части хранимой процедуры с рядом назначений переменных:
SET @proc = 'sp_madeupname'
SET @magic_number = 42
SET @tomorrows_date = DATEADD(dd, 1, GETDATE())
...
Ясно, что все вышеперечисленное, так как один SELECT будет быстрее:
SELECT
@proc = 'sp_madeupname'
,@magic_number = 42
,@tomorrows_date = DATEADD(dd, 1, GETDATE())
...
Но сколько быстрее? Скажем, если эта хранимая процедура выполнялась как часть цикла несколько тысяч раз, будет ли это иметь какое-либо существенное влияние на производительность?


Я думал об этом, но никогда не проверял.
По моему опыту, оптимизатор довольно хорош, поэтому я думаю, что это не имеет значения, но я бы провел несколько тестов, если вы считаете, что он действительно полезен.
Я думаю, что выполнение нескольких назначений может быть полезно с точки зрения обслуживания, если вы хотите, чтобы некоторые вещи, которые всегда должны выполняться вместе, не разбивались на вырезание и вставку или рефакторинг.
По той же причине код, который является относительно модульным, может выиграть от отдельной инициализации, поскольку ее легче вырезать и вставить для рефакторинга во время обслуживания.
В этом случае SELECT выигрывает с точки зрения производительности при выполнении нескольких назначений.
Вот еще немного информации об этом: