Назначение переменной из оператора select - PullRequest
4 голосов
/ 06 июня 2011

Может кто-нибудь, пожалуйста, скажите мне.

Какой правильный синтаксис?

DECLARE @TotalRows INT
SET @TotalRows = (SELECT COUNT(*) FROM MyTable WHERE MyID = Value)

ИЛИ

DECLARE @TotalRows INT
SELECT @TotalRows = COUNT(*) FROM MyTable WHERE MyID = Value

Имеет ли это значение?

1 Ответ

3 голосов
/ 06 июня 2011

Разница между набором и выбором

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