ใน SQL Server อะไรคือความแตกต่างระหว่าง @ table, # table และ ## table?
ใน SQL Server อะไรคือความแตกต่างระหว่าง @ table, # table และ ## table?
คำตอบ:
#table หมายถึงตารางชั่วคราวในเครื่อง (มองเห็นได้เฉพาะผู้ใช้ที่สร้าง)
##table หมายถึงตารางชั่วคราวส่วนกลาง (ผู้ใช้ทุกคนมองเห็นได้)
@variableName หมายถึงตัวแปรที่สามารถเก็บค่าได้ขึ้นอยู่กับประเภทของมัน
#และ##ตารางเป็นตารางจริงที่แสดงในฐานข้อมูลชั่วคราว ตารางเหล่านี้สามารถมีดัชนีและสถิติและสามารถเข้าถึงได้ข้าม sprocs ในเซสชัน (ในกรณีของตารางชั่วคราวทั่วโลกจะมีให้เลือกระหว่างเซสชัน)
@table เป็นตัวแปรตาราง
สำหรับข้อมูลเพิ่มเติม: http://www.sqlteam.com/article/tem Contemporary-tables
ฉันจะเน้นที่ความแตกต่างระหว่าง #table และ @table ## table เป็นตารางชั่วคราวทั่วโลกและเป็นเวลากว่า 10 ปีของการใช้ SQL Server ฉันยังไม่พบกรณีการใช้งานที่ถูกต้อง ฉันแน่ใจว่ามีอยู่บ้าง แต่ธรรมชาติของวัตถุทำให้ IMHO ใช้งานไม่ได้อย่างมาก
การตอบสนองต่อ @whiner โดย @marc_s นั้นเป็นความจริงอย่างแน่นอนมันเป็นตำนานที่แพร่หลายว่าตัวแปรตารางจะอยู่ในหน่วยความจำเสมอ เป็นเรื่องปกติที่ตัวแปรตารางจะไปที่ดิสก์และทำงานเหมือนกับตารางชั่วคราว
อย่างไรก็ตามฉันขอแนะนำให้อ่านชุดของความแตกต่างโดยทำตามลิงก์ที่ระบุโดย @Astander ความแตกต่างส่วนใหญ่เกี่ยวข้องกับข้อ จำกัด ในสิ่งที่คุณไม่สามารถทำได้กับตัวแปร @table
CREATE TABLE #t
สร้างตารางที่มองเห็นได้เฉพาะในและระหว่างนั้น CONNECTION ผู้ใช้คนเดียวกันที่สร้างการเชื่อมต่ออื่นจะไม่สามารถเห็นตาราง #t จากการเชื่อมต่ออื่น
CREATE TABLE ##t
สร้างตารางชั่วคราวที่มองเห็นได้สำหรับการเชื่อมต่ออื่น ๆ แต่ตารางจะหลุดเมื่อการสร้างการเชื่อมต่อสิ้นสุดลง
SqlConnection.Open()กับสตริงการเชื่อมต่อเดียวกันคือการเชื่อมต่อเดียวกัน ?
หากคุณต้องการตารางชั่วคราวส่วนกลางที่ไม่ซ้ำใครให้สร้างของคุณเองด้วย Uniqueidentifier Prefix / Suffix และวางการดำเนินการโพสต์หาก object_id (.... ข้อเสียเปรียบเพียงอย่างเดียวคือการใช้ Dynamic sql และจำเป็นต้องลดลงอย่างชัดเจน