SET против SELECT - какая разница?
Может ли кто-нибудь определить различия функциональности/производительности, если таковые имеются, между SET
и SELECT
в T-SQL? В каких условиях я должен выбирать один за другим?
UPDATE:
Спасибо всем, кто ответил. Как отметили несколько человек, эта статья Нараяна Вьяс Кондредди имеет много хорошей информации. Я также просмотрел сеть после прочтения статьи и нашел эту сконденсированную версию Ryan Farley, который предлагает основные моменты и мысли, которые я бы разделил их:
- SET - стандарт ANSI для
присваивание переменной, SELECT не является.
- SET может назначать только одну переменную в
время, SELECT может сделать несколько
заданий сразу.
- При назначении из запроса SET может
присваивать только скалярное значение. Если
запрос возвращает несколько значений/строк
то SET поднимет ошибку. ВЫБРАТЬ
будет присвоить одно из значений
переменной и скрыть тот факт, что
было возвращено несколько значений (так
вы, вероятно, никогда не узнаете, почему
что-то пошло не так в другом месте - получайте удовольствие от устранения неполадок в этом)
- При назначении из запроса, если
не возвращается значение, тогда SET будет
назначить NULL, где SELECT не будет
сделать назначение вообще (так что
переменная не будет изменена с
это предыдущее значение)
- Что касается различий в скорости - там
нет прямых различий между
SET и SELECT. Однако SELECT
способность выполнять несколько заданий
в одном выстреле дает ему небольшой
преимущество перед SET.
Ответы
Ответ 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
Я надеюсь, что это поможет
веселит
Ответ 5
Общий вопрос, законченный ответ:
http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/01/25/defensive-database-programming-set-vs-select.aspx