SQL SELECT multi-column INTO multi-variable


86

Teradata'dan SQL Server'ı SQL Server'a dönüştürüyorum

Teradata'da biçime sahipler

SELECT col1, col2
FROM table1
INTO @variable1, @variable2

SQL Server'da buldum

SET @variable1 = (
SELECT col1 
FROM table1
);

Bu, ifade başına yalnızca tek bir sütun / değişkene izin verir. Tek bir SELECT deyimi kullanarak 2 veya daha fazla değişken nasıl atanır?

Yanıtlar:


173
SELECT @variable1 = col1, @variable2 = col2
FROM table1

Bunu yapmak, birden çok SELECT'e kıyasla performansı / hızı artıracak mı yoksa aynı mı?
Shankar Nathan

8
Gerçek cevap, test etmek ve kendiniz görmektir. Gayri resmi cevap, elbette, muhtemelen evet.
underscore_d

35
SELECT @var = col1,
       @var2 = col2
FROM   Table

SET / SELECT hakkında bazı ilginç bilgiler.

  • SET değişken atama için ANSI standardıdır, SELECT değildir.
  • SET aynı anda yalnızca bir değişken atayabilir, SELECT aynı anda birden fazla atama yapabilir.
  • Bir sorgudan atama yapıyorsanız, SET yalnızca skaler bir değer atayabilir. Sorgu birden fazla değer / satır döndürürse, SET bir hata verir. SELECT, değerlerden birini değişkene atayacak ve birden fazla değerin döndürüldüğü gerçeğini gizleyecektir (bu nedenle başka bir yerde bir şeylerin neden ters gittiğini muhtemelen asla bilemezsiniz - bunu sorun gidermede eğlenin)
  • Bir sorgudan atama yaparken, döndürülen bir değer yoksa SET, NULL atayacaktır, burada SELECT atamayı hiç yapmayacaktır (böylece değişken önceki değerinden değiştirilmeyecektir)
  • Hız farklarına gelince - AYARLA ve SEÇİM arasında doğrudan fark yoktur. Ancak SELECT'in tek çekimde birden fazla atama yapabilme yeteneği, SET'e göre hafif bir hız avantajı sağlar.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.