SQL SELECT หลายคอลัมน์เข้าสู่หลายตัวแปร


86

ฉันกำลังแปลง SQL จาก Teradata เป็น SQL Server

ใน Teradata มีรูปแบบ

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

ใน SQL Server ฉันพบ

SET @variable1 = (
SELECT col1 
FROM table1
);

อนุญาตให้ใช้คอลัมน์ / ตัวแปรเดียวต่อคำสั่งเท่านั้น วิธีกำหนดตัวแปร 2 ตัวขึ้นไปโดยใช้คำสั่ง SELECT เดียว?

คำตอบ:


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

การทำเช่นนี้จะช่วยเพิ่มประสิทธิภาพ / ความเร็วเมื่อเทียบกับ SELECT หลายตัวหรือเหมือนกันหรือไม่
Shankar Nathan

8
คำตอบที่แท้จริงคือการทดสอบและดูด้วยตัวคุณเอง คำตอบที่ไม่เป็นทางการคือใช่แน่นอนอาจเป็นได้
underscore_d

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

นี่คือข้อมูลที่น่าสนใจเกี่ยวกับ SET / SELECT

  • SET เป็นมาตรฐาน ANSI สำหรับการกำหนดตัวแปร, SELECT ไม่ใช่
  • SET สามารถกำหนดได้ครั้งละหนึ่งตัวแปรเท่านั้น SELECT สามารถทำการมอบหมายได้หลายรายการพร้อมกัน
  • หากกำหนดจากแบบสอบถาม SET สามารถกำหนดได้เฉพาะค่าสเกลาร์ หากแบบสอบถามส่งคืนค่า / แถวหลายค่า SET จะแสดงข้อผิดพลาด SELECT จะกำหนดค่าใดค่าหนึ่งให้กับตัวแปรและซ่อนความจริงที่ว่ามีการส่งคืนค่าหลายค่า (ดังนั้นคุณอาจไม่มีทางรู้ว่าทำไมจึงเกิดข้อผิดพลาดที่อื่น - ขอให้สนุกกับการแก้ไขปัญหานั้น)
  • เมื่อกำหนดจากแบบสอบถามหากไม่มีค่าที่ส่งกลับ SET จะกำหนด NULL โดยที่ SELECT จะไม่ทำการกำหนดเลย (ดังนั้นตัวแปรจะไม่ถูกเปลี่ยนแปลงจากค่าก่อนหน้า)
  • ความแตกต่างของความเร็ว - ไม่มีความแตกต่างโดยตรงระหว่าง SET และ SELECT อย่างไรก็ตามความสามารถของ SELECT ในการมอบหมายงานหลาย ๆ งานในช็อตเดียวทำให้ได้เปรียบด้านความเร็วเล็กน้อยเหนือ SET
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.