Подтвердить что ты не робот

SET против SELECT - какая разница?

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


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

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

Ответ 1

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

Более подробную информацию и примеры см. в разделе Разница между SET и SELECT при назначении значений для переменных

Ответ 2

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

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

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

Ответ 3

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

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

Подробнее читайте в этом подробном сообщении Нараяна Вьяс

Ответ 4

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

что-то вроде

выберите @var1 = 1, @var2 = 2

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

set @var1 = 1

set @var2 = 2

Я надеюсь, что это поможет

веселит