Отличия SET и SELECT
От: _MarlboroMan_ Россия  
Дата: 10.11.03 11:43
Оценка: 38 (3) +1
#Имя: FAQ.db.setselect
А>Хотелось бы узнать есть ли принципиальная разница между этими двумя путями. И если есть, то какая

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

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 >>

— сколько программистов надо чтобы заменить сгоревшую лампочку?
— сколько не бери, а лампочку не поменять — проблема аппаратная, программным путем не решается...
Re[2]: Отличия SET и SELECT
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.03 21:12
Оценка: 26 (1) +1
Здравствуйте, _MarlboroMan_, Вы писали:

Вообще-то set создали чтобы было меньше ошибок при присвоениях. Так как в селекте можно легко ошибиться (забыть @) и селект воспримет это как именование поля. Сет же полет на фиг.
... << RSDN@Home 1.1.0 stable >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Отличия SET и SELECT
От: Аноним  
Дата: 10.11.03 07:29
Оценка: -1
Здравствуйте, Аноним, Вы писали:

А>Привет всем.

А>Для присвоения значения переменной в T-SQL можно писать так:
А>Хотелось бы узнать есть ли принципиальная разница между этими двумя путями. И если есть, то какая

select может дополнительно извлекать значения из таблиц (ежели укажешь from), а set — нет
Отличия SET и SELECT
От: Аноним  
Дата: 10.11.03 07:04
Оценка:
Привет всем.
Для присвоения значения переменной в T-SQL можно писать так:
declare @var1 int

select @var1 = ...


а можно так

declare @var1 int

set @var1 = ...


Хотелось бы узнать есть ли принципиальная разница между этими двумя путями. И если есть, то какая
Re[2]: Отличия SET и SELECT
От: LantY Россия icq:56949749
Дата: 10.11.03 07:47
Оценка:
Здравствуйте, Аноним, Вы писали:

А>select может дополнительно извлекать значения из таблиц (ежели укажешь from), а set — нет


Нифига подобного. Вот такая конструкция вполне допустима
DECLARE @a as int
SET @a = SELECT top 1 ID FROM table ORDER BY desc


Просто SET обладает большей функциональностью.
При присвоении в SELECT-е переменная должна иметь тип, допустимый в таблице. А SET позволяет задать любой допустимый в системе тип.
По-моему так.
С уважением, Дмитрий.
Re[3]: Отличия SET и SELECT
От: Аноним  
Дата: 10.11.03 07:55
Оценка:
Здравствуйте, LantY, Вы писали:
LY>По-моему так.

И что, это все отличия?
Re: Отличия SET и SELECT
От: DMVB  
Дата: 10.11.03 08:09
Оценка:
А>Хотелось бы узнать есть ли принципиальная разница между этими двумя путями. И если есть, то какая

SELECT позволяет за один раз присвоить значения нескольким переменным.
Re[4]: Отличия SET и SELECT
От: LantY Россия icq:56949749
Дата: 10.11.03 08:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, LantY, Вы писали:

LY>>По-моему так.

А>И что, это все отличия?

Дык я же не гуру.
Покопался 5 минут в BOL, что смог заметить — описал.
Вообще-то разработчики рекомендуют для начальной инициализации использовать SET.
Еще, "SELECT @var ..." позволяет задать значения нескольким переменным, сохраняет предыдущее значение, если выборка оказалась пустой.
А вообще — смотри BOL,
топики SELECT @local_variable и SET @local_variable
С уважением, Дмитрий.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.