А>Хотелось бы узнать есть ли принципиальная разница между этими двумя путями. И если есть, то какая
Разница есть. но незначительная.
1. используя set можно определять курсоры, а при используя select — нельзя.
declare @cursor cursor
set @cursor = CURSOR for select <fields> from <table>
2. используя set можно переприсваивать "курсорные" переменные, а используя select — нет
declare @cursor cursor, @cursor2 cursor
set @cursor = CURSOR for select id from __meta
set @cursor2 = @cursor -- валидное выражение
select @cursor2 = @cursor -- ошибка
3. используя select можно одним оператором выполнить присваивание для нескольких переменных
declare @a int, @b varchar(10), @c datetime
select @a =1, @b = cast(@a+1 as varchar), @c = cast(@a+2 as datetime)
select '@a' = @a, '@b' = @b, '@c' = @c
Results:
@a @b @c
----------- ---------- ------------------------------------------------------
1 2 1900-01-04 00:00:00.000
4. конструкция
set @id = (select id from <table> )
обломится если в "возвёрнутом" наборе данных > 1 записи, а select проглотит и не поморщится, имхо: да и читается select попроще.
5. при помощи set не "забацаешь" цикл, а select можно обмануть и не городить курсоров:
select
@st = @st + <field>
from <table>
PS ну что вспомнилось — сообщил. лично я в разных случаях использую то set, то select
... << RSDN@Home 1.1 beta 2 >>