SET против SELECT - какая разница? - PullRequest
39 голосов
/ 15 мая 2009

Может ли кто-нибудь определить различия в функциональности / производительности, если таковые имеются, между SET и SELECT в T-SQL? При каких условиях я должен выбирать один над другим?


UPDATE:
Спасибо всем, кто откликнулся. Как отметили несколько человек, эта статья Нараяна Вьяс Кондредди содержит много полезной информации. Я также просмотрел сеть после прочтения статьи и нашел эту сокращенную версию Райана Фарли , которая предлагает основные моменты и думал, что я поделюсь ими:

  1. SET - это стандарт ANSI для присваивание переменной, SELECT - нет.
  2. SET может назначать только одну переменную в время, SELECT может сделать несколько задания сразу.
  3. При назначении из запроса SET может назначьте только скалярное значение. Если запрос возвращает несколько значений / строк тогда SET вызовет ошибку. ВЫБРАТЬ назначит одно из значений переменная и скрыть тот факт, что несколько значений были возвращены (так вы, вероятно, никогда не знаете, почему в другом месте что-то пошло не так - получайте удовольствие, устраняя это)
  4. При назначении из запроса, если есть значение не возвращается, тогда SET будет присвойте NULL, где SELECT не будет сделать назначение на всех (так что переменная не будет изменена с это предыдущее значение)
  5. Насколько разница в скорости - есть нет прямых различий между УСТАНОВИТЬ и ВЫБРАТЬ. Однако SELECT умение делать несколько заданий в одном кадре преимущество в скорости перед SET.

Ответы [ 5 ]

27 голосов
/ 15 мая 2009

SET - это стандартный способ присвоения значений переменным в соответствии с ANSI, а SELECT - нет. Но вы можете использовать SELECT, чтобы назначать значения более чем одной переменной одновременно. SET позволяет назначать данные только одной переменной за раз. Так что в производительности именно SELECT будет победителем.

Для получения более подробной информации и примеров смотрите: Разница между SET и SELECT при назначении значений переменным

7 голосов
/ 15 мая 2009

SQL Server: одна из ситуаций, в которой вы должны использовать SELECT, это когда присваиваете @@ ERROR и @@ ROWCOUNT, так как они должны быть установлены в одном и том же выражении (в противном случае они сбрасываются):

SELECT @error = @@ERROR, @rowcount = @@ROWCOUNT

(SET работает только с одним значением за раз)

6 голосов
/ 15 мая 2009

Установить - Стандарт ANSI для присвоения значений переменным.

Выбор может использоваться при назначении значений для нескольких переменных .

Для более подробной информации, пожалуйста, прочитайте этот подробный пост Нараяна Вьяс

3 голосов
/ 15 мая 2009

установить и выбрать оба назначить значения для переменных. Используя select, вы можете присвоить значения более чем одной переменной

что-то вроде

select @ var1 = 1, @ var2 = 2

, где при использовании набора вы должны использовать отдельные операторы набора (это способ присваивания значений в соответствии с ANSI), т.е.

set @ var1 = 1

set @ var2 = 2

Надеюсь, это поможет

ура

0 голосов
/ 18 мая 2009
...