Сообщений 12    Оценка 130 [+0/-1]         Оценить  
Система Orphus

Q&A: Set и Select

Автор: Дмитрий Полюдов
The RSDN Group

Источник: RSDN Magazine #5-2003
Q. Хотелось бы узнать есть ли принципиальная разница между этими двумя путями. И если есть, то какая?

Q. Хотелось бы узнать есть ли принципиальная разница между этими двумя путями. И если есть, то какая?

A. Разница есть, но незначительная.

1. Используя set, можно определять курсоры, а используя select – нельзя.

      declare @cursorcursorset @cursor = CURSORforselect <fields> from <table>

2. Используя set, можно переприсваивать "курсорные" переменные, а используя select – нет.

      declare @cursorcursor, @cursor2 cursorset @cursor = CURSORforselect 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>


Эта статья опубликована в журнале RSDN Magazine #5-2003. Информацию о журнале можно найти здесь
    Сообщений 12    Оценка 130 [+0/-1]         Оценить