จำเป็นต้องใช้ # ในการสร้างตารางชั่วคราวในเซิร์ฟเวอร์ SQL หรือไม่


91

จำเป็นต้องใช้#ก่อนสร้างตารางชั่วคราวในเซิร์ฟเวอร์ SQL หรือไม่?

ตัวอย่าง:

SELECT column1, column2, someInt, someVarChar 
INTO ItemBack1 
FROM table2
WHERE table2.ID = 7

สำหรับ ItemBack1 จำเป็นต้องใช้#สัญลักษณ์หรือไม่?

ถ้าไม่เช่นนั้น#การสร้างตารางชั่วคราวคืออะไร?


3
ใช่. # สร้างตารางชั่วคราว โดยไม่ต้องสร้างตาราง
Jeow Li Huan

คำตอบ:


151

ใช่. คุณต้องนำหน้าชื่อตารางด้วย "#" (แฮช) เพื่อสร้างตารางชั่วคราว

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

"##" (แฮชคู่จะสร้างตารางชั่วคราว "ส่วนกลาง" ที่เซสชันอื่นเข้าถึงได้เช่นกัน

อ้างอิงลิงค์ด้านล่างสำหรับข้อมูลพื้นฐานของตารางชั่วคราว: http://www.codeproject.com/Articles/42553/Quick-Overview-Tem

หากเนื้อหาในตารางของคุณน้อยกว่า 5,000 แถวและไม่มีชนิดข้อมูลเช่น nvarchar (MAX), varbinary (MAX) ให้พิจารณาใช้ตัวแปรตาราง

เร็วที่สุดเนื่องจากเหมือนกับตัวแปรอื่น ๆ ที่เก็บไว้ใน RAM พวกเขาจะถูกเก็บไว้ใน tempdb เป็นอย่างดีไม่ได้อยู่ในแรม

DECLARE @ItemBack1 TABLE
(
 column1 int,
 column2 int,
 someInt int,
 someVarChar nvarchar(50)
);

INSERT INTO @ItemBack1
SELECT column1, 
       column2, 
       someInt, 
       someVarChar 
  FROM table2
 WHERE table2.ID = 7;

ข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรตาราง: http://odetocode.com/articles/365.aspx


11
ใน SQL Server ไวยากรณ์ SELECT คือ INSERT INTO @ ItemBack1 SELECT column1, column2, someInt, someVarChar จาก table2 WHERE table2.ID = 7
mhenry1384

8
ตารางตัวแปรจะไม่ถูกเก็บไว้ใน RAM แต่จะถูกเก็บไว้ใน tempdb ด้วย ฉันขอแนะนำให้อย่าใช้ตัวแปรตารางเว้นแต่คุณจะเข้าใจข้อเสียบางประการเนื่องจากจำนวนแถวของพวกเขาจะถูกตั้งค่าเป็นหนึ่งโดยอัตโนมัติและแผนที่ไม่ดีอาจส่งผล
ConstantineK

คุณสามารถให้แหล่งที่มาสำหรับ 5000 แถว, nvarchar (สูงสุด), ข้อ จำกัด varbinary (สูงสุด) ได้หรือไม่? สิ่งนี้ได้รับอนุญาต แต่ฉันไม่แน่ใจว่าทำไมจึงไม่แนะนำ
Brad

1
ฉันก็คิดว่าตัวแปรตารางถูกเก็บไว้ในหน่วยความจำ ฉันยืนแก้ไข: dba.stackexchange.com/a/16386/23720
Baodad

1
ฉันจะแสดงความคิดเห็นเกินไปว่ามันเป็นความจริงที่ว่าตัวแปรตารางถูกเก็บไว้ใน tempdb ฉันกำลังแสดงความคิดเห็นดังนั้นอาจมีคนอ่านความคิดเห็นมากกว่านี้และได้รับมันในหัวเนื่องจากฉันเบื่อที่จะเดินเข้าไปร่วมงานในฐานะที่ปรึกษาอาวุโสที่ต้องเถียงกับพนักงานเต็มเวลาที่ไม่รู้เรื่องและพยายามพูดอย่างอื่น ฉันกำลังพูดถึง บริษัท หลายสิบแห่งใน Fortune 500 ดีใจที่มีคนแสดงความคิดเห็น น่าเสียดายเว้นแต่ OP นี้ที่ตอบคำถามได้แก้ไขคำตอบของพวกเขาจริงเราจะยังคงให้ความไม่รู้นี้อยู่ต่อไปอีกประมาณทศวรรษหรือมากกว่านั้น
Tom Stickel

14

ความแตกต่างระหว่างสองตารางนี้ItemBack1และตาราง#ItemBack1แรกเป็นแบบถาวร (ถาวร) โดยที่อีกตารางเป็นแบบชั่วคราว

ตอนนี้ถ้าลองดูคำถามของคุณอีกครั้ง

จำเป็นต้องใช้ # ในการสร้างตารางชั่วคราวในเซิร์ฟเวอร์ sql หรือไม่

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

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