สองเซสชันสร้าง #temp tables ด้วยชื่อเดียวกันได้หรือไม่


17

ฉันกำลังสร้างตารางชั่วคราว ( #myTable) และใช้เคอร์เซอร์ สิ่งนี้สร้างปัญหาหรือไม่เมื่อผู้ใช้พร้อมกันเข้าถึงเคอร์เซอร์ผ่านแอปพลิเคชันของฉัน ฉันอนุญาตให้สร้างตารางชั่วคราวแยกด้วยชื่อเดียวกันได้หรือไม่

ต่อไปนี้เป็นตัวอย่างรหัส:

Open cursor;
Fetch Next from cursor into @Variable_Temp_Table_Name;
Create table #myTable(pk int)
While @@Fetch_Status = 0
Begin    
Fetch Next from cursor into @Variable_Temp_Table_Name;
End 

คำตอบ:


20

เซิร์ฟเวอร์ SQL จะผนวกตัวเลขสุ่มบางตัวที่ส่วนท้ายของชื่อตาราง temp (หลังฉาก) เมื่อผู้ใช้ที่เกิดขึ้นพร้อมกันสร้างตารางชั่วคราวในเซสชันของตนด้วยชื่อเดียวกันเซิร์ฟเวอร์ sql จะสร้างตารางชั่วคราวหลายรายการใน tempdb

ฉันสร้างตารางชั่วคราว 3 ตารางที่เรียกว่า#TempTableในสามเซสชันที่แตกต่างกันใน SSMS ของฉันตอนนี้ถ้าฉันไปที่ tempdb ฉันสามารถดูตารางชั่วคราวที่สร้างขึ้นที่นั่นด้วยสตริงแบบสุ่ม (ไม่ซ้ำกัน) ผนวกเข้ากับชื่อของแต่ละตาราง temp

ป้อนคำอธิบายรูปภาพที่นี่


11

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

แก้ไขเพื่อรวมความคิดเห็น:

สิ่งหนึ่งที่เพิ่มเติมเกี่ยวกับการใช้ตาราง #temp คือถ้าคุณต้องการเพิ่มข้อ จำกัด ให้เซิร์ฟเวอร์ SQL สร้างชื่อมิฉะนั้นแม้ว่าตารางจะไม่ซ้ำกับเซสชัน แต่ข้อ จำกัด จะไม่เกิดขึ้นและอินสแตนซ์ที่สองจะผิดพลาดในการสร้าง โต๊ะ.


7
สิ่งหนึ่งที่เพิ่มเติมเกี่ยวกับการใช้ตาราง #temp คือถ้าคุณต้องการเพิ่มข้อ จำกัด ให้เซิร์ฟเวอร์ SQL สร้างชื่อมิฉะนั้นแม้ว่าตารางจะไม่ซ้ำกับเซสชัน แต่ข้อ จำกัด จะไม่เกิดขึ้นและอินสแตนซ์ที่สองจะผิดพลาดในการสร้าง โต๊ะ.
แอรอน

1
@Aaron - แนะนำให้คุณย้ายความคิดเห็นเกี่ยวกับข้อ จำกัด ที่ไม่มีชื่อไปสู่คำตอบ ผู้คนจำนวนมากยุ่งกับรายละเอียดนั้น
RLF

นอกจากนี้ยังทราบว่าถ้ามีคนไม่ต้องการตาราง temp ##likeThisทั่วโลกที่พวกเขาสามารถประกาศ
underscore_d

@RLF และ Aaron: สามารถสร้าง GUID ด้วย NEWID () และสร้างข้อ จำกัด ผ่าน Dynamic SQL ไม่ได้บอกว่าสะอาดเหมือนรวมไว้ในคำสั่ง CREATE TABLE แต่อย่างน้อยก็เป็นตัวเลือก และฉันยังเชื่อว่าข้อ จำกัด FK ไม่ได้รับอนุญาตบนตารางอุณหภูมิ (ตราบใดที่เรากำลังพูดถึงข้อ จำกัด โดยทั่วไป)
โซโลมอน Rutzky

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