2009-08-27 35 views
59

tôi là chuyển đổi SQL từ Teradata để SQL ServerSQL SELECT đa cột VÀO đa biến

trong Teradata, họ có định dạng

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

Trong SQL Server, tôi thấy

SET @variable1 = (
SELECT col1 
FROM table1 
); 

Điều đó chỉ cho phép một cột/biến trên mỗi câu lệnh. Làm thế nào để gán 2 hoặc nhiều biến bằng cách sử dụng một câu lệnh SELECT?

Trả lời

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

Việc này có cải thiện hiệu suất/tốc độ so với nhiều CHỌN hay không? –

+7

Câu trả lời thực sự là để kiểm tra nó và xem cho chính mình. Câu trả lời chính thức là có, tất nhiên, có lẽ. –

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

Dưới đây là một số thông tin thú vị về SET/SELECT

  • SET là tiêu chuẩn ANSI cho giao biến, SELECT thì không.
  • SET chỉ có thể gán một biến tại một thời điểm, SELECT có thể thực hiện nhiều bài tập cùng một lúc.
  • Nếu gán từ truy vấn, SET chỉ có thể gán giá trị vô hướng. Nếu truy vấn trả về nhiều giá trị/hàng thì SET sẽ phát sinh lỗi. CHỌN sẽ chỉ định một trong các giá trị vào biến và giấu một thực tế rằng nhiều giá trị đã được trả lại (vì vậy bạn muốn có khả năng không bao giờ biết tại sao một cái gì đó đã đi sai nơi khác - vui chơi xử lý sự cố mà một)
  • Khi gán từ một truy vấn nếu không có giá trị trả về sau đó SET sẽ assign NULL, nơi CHỌN sẽ không làm nhiệm vụ ở tất cả (vì vậy biến sẽ không được thay đổi từ đó là giá trị trước đó)
  • theo như tốc độ khác nhau - không có sự khác biệt trực tiếp giữa SET và CHỌN. Tuy nhiên khả năng của SELECT để thực hiện nhiều bài tập trong một lần chụp cho tốc độ nhẹ lợi thế hơn SET.
Các vấn đề liên quan