@table_variable หรือ #temp_table


11

ฉันมีตัวแปรประเภทตารางที่กำหนดโดยผู้ใช้ขนาดใหญ่ที่มี 129 คอลัมน์ ฉันจะเก็บระเบียนประมาณ 2,000-3,000 รายการในตัวแปรตารางนี้ในแต่ละครั้งและส่งต่อไปยังกระบวนงานและฟังก์ชันที่เก็บไว้ต่าง ๆ เพื่อรับข้อมูลเพิ่มเติมและทำการแก้ไข ข้อมูลเพิ่มเติมและการแก้ไขใหม่เหล่านี้จะถูกเก็บไว้ในตัวแปรตารางใหม่ชนิดเดียวกันและกลับสู่ขั้นตอนการจัดเก็บต้นฉบับผ่านOUTPUTพารามิเตอร์ (นี่เป็นเพราะพารามิเตอร์ประเภทตารางสามารถส่งผ่านเป็นREADONLYเท่านั้น)

นี่คือรหัสหลอกของฉัน:

  SP1
  @tmp tableType
  {
        INSERT @tmp EXEC
        SP2 (@tmp)

        INSERT @tmp EXEC
        SP3 (@tmp)
  }

ฉันควรใช้@table_variableหรือ#temp_table?


คำตอบ:


12

มีสองบล็อกที่คุณควรดู ตัวแรก ( ที่นี่ ) คือการเปรียบเทียบตัวแปรตารางและตารางชั่วคราว มันมาจากปี 2008 และยังคงเกี่ยวข้องกับ SQL Server 2008 R2

รายการบล็อกที่สอง ( ที่นี่ ) เกี่ยวข้องกับความเข้าใจผิดบางประการ (พลาดแนวคิด) เกี่ยวกับตัวแปรตาราง; รวมถึงการจัดทำดัชนีตัวแปรตาราง

บทความบล็อกทั้งสองนี้เขียนโดย Gail Shaw

ฉันเชื่อว่ารายการที่คุณกำลังมองหาคือ Table Variable อาจไม่ถูกส่งผ่านระหว่างโพรซีเดอร์ที่เก็บไว้ในขณะที่ Temp Table สามารถส่งผ่านระหว่างโพรซีเดอร์ที่เก็บไว้ได้ ตัวแปรตารางที่ใกล้เคียงที่สุดมาถึงระหว่างขั้นตอนการจัดเก็บเป็นประเภทตารางที่ผู้ใช้กำหนด

การส่ง Table Variable เป็น TVP ไปยังโพรซีเดอร์ที่เก็บไว้นั้นจะต้องมีข้อกำหนดที่ต้องกำหนดเป็นพารามิเตอร์แบบอ่านอย่างเดียว นี่หมายความว่าจะมีสำเนาของตัวแปรตารางหลายชุดหากคุณต้องการส่งคืนสำเนาดัดแปลงของมัน

ทั้งหมดบอกว่าการส่งผ่านระหว่างโพรซีเดอร์ที่เก็บไว้อาจให้บริการได้ดีขึ้นจากตารางชั่วคราวเมื่อคุณต้องการส่งคืนโครงสร้างแบบพาส - อินด้วยค่าที่อัปเดต


5

ไม่มีอะไรดีไปกว่าการลองใช้ทั้งคู่ แต่ฉันพบว่า #tempTables ทำงานได้ดีขึ้นเมื่อคุณเข้าสู่หลายร้อยรายการ


3
เพิ่มไปที่ข้อเท็จจริงที่ว่าตาราง temp สามารถมีดัชนีได้มีสถิติในขณะที่ตัวแปรตารางสามารถมี PK ได้เท่านั้น คุณมีรายละเอียดบางอย่างที่นี่
แมเรียน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.