SQL CHỌN nhiều cột VÀO đa biến


85

Tôi đang chuyển đổi SQL từ Teradata sang SQL Server

ở Teradata, chúng có định dạng

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

Trong SQL Server, tôi tìm thấy

SET @variable1 = (
SELECT col1 
FROM table1
);

Điều đó chỉ cho phép một cột / biến duy nhất trên mỗi câu lệnh. Làm cách 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?

Câu trả lời:


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

Làm điều này sẽ cải thiện hiệu suất / tốc độ so với nhiều SELECT hay nó giống nhau?
Shankar Nathan

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

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

Đây là một số thông tin thú vị về SET / SELECT

  • SET là tiêu chuẩn ANSI để gán 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ể gán nhiều biến cùng một lúc.
  • Nếu gán từ một truy vấn, SET chỉ có thể gán một 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. SELECT sẽ chỉ định một trong các giá trị cho biến và ẩn thực tế là nhiều giá trị đã được trả về (vì vậy bạn có thể sẽ không bao giờ biết tại sao có điều gì đó không ổn ở nơi khác - hãy vui vẻ khắc phục sự cố đó)
  • Khi gán từ một truy vấn nếu không có giá trị nào được trả về thì SET sẽ gán NULL, trong đó SELECT sẽ không thực hiện việc gán (vì vậy biến sẽ không bị thay đổi so với giá trị trước đó của nó)
  • Về sự khác biệt về tốc độ - không có sự khác biệt trực tiếp giữa SET và SELECT. Tuy nhiên, khả năng thực hiện nhiều nhiệm vụ trong một lần chụp của SELECT mang lại cho nó một chút lợi thế về tốc độ so với SET.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.