Может ли кто-нибудь определить различия функциональности/производительности, если таковые имеются, между SET
и SELECT
в T-SQL? В каких условиях я должен выбирать один за другим?
UPDATE:
Спасибо всем, кто ответил. Как отметили несколько человек, эта статья Нараяна Вьяс Кондредди имеет много хорошей информации. Я также просмотрел сеть после прочтения статьи и нашел эту сконденсированную версию Ryan Farley, который предлагает основные моменты и мысли, которые я бы разделил их:
- SET - стандарт ANSI для присваивание переменной, SELECT не является.
- SET может назначать только одну переменную в время, SELECT может сделать несколько заданий сразу.
- При назначении из запроса SET может присваивать только скалярное значение. Если запрос возвращает несколько значений/строк то SET поднимет ошибку. ВЫБРАТЬ будет присвоить одно из значений переменной и скрыть тот факт, что было возвращено несколько значений (так вы, вероятно, никогда не узнаете, почему что-то пошло не так в другом месте - получайте удовольствие от устранения неполадок в этом)
- При назначении из запроса, если не возвращается значение, тогда SET будет назначить NULL, где SELECT не будет сделать назначение вообще (так что переменная не будет изменена с это предыдущее значение)
- Что касается различий в скорости - там нет прямых различий между SET и SELECT. Однако SELECT способность выполнять несколько заданий в одном выстреле дает ему небольшой преимущество перед SET.