2009-08-27 46 views
59

我將SQL從Teradata數據到SQL Server中的TeradataSQL選擇多列插入多變量

,他們有格式

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

在SQL Server中,我發現

SET @variable1 = (
SELECT col1 
FROM table1 
); 

每個語句只允許一個列/變量。如何使用單個SELECT語句分配2個或更多變量?

回答

120
SELECT @variable1 = col1, @variable2 = col2 
FROM table1 
+0

與多個SELECT相比,這樣做會提高性能/速度還是相同? –

+7

真正的答案是測試它並親自查看。當然,非正式的答案是肯定的。 –

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

以下是有關設置一些有趣的信息/ SELECT

  • 集是變量賦值的ANSI標準,SELECT不是。
  • SET一次只能分配一個變量,SELECT可以一次進行多個 賦值。
  • 如果從查詢分配,SET只能分配一個標量值。如果 查詢返回多個值/行 ,則SET將引發錯誤。選擇 將分配一個值到 變量和隱藏返回了 多個值的事實,(所以 可能你不會知道爲什麼事情 要去別的地方錯了 - 有樂趣 疑難解答之一)
  • 當從查詢分配,如果沒有返回值則SET將 分配NULL,這裏選擇不會 讓所有的分配(所以 變量將不會改變從它的 前值)
  • 至於速度的差異 - SET之間沒有直接的區別0和SELECT。然而,SELECT的能力 在一個 拍攝做出多個任務確實給它一個輕微的速度 優於SET。