การแทรกข้อมูลลงในตารางชั่วคราว


195

หลังจากสร้างตารางชั่วคราวแล้วประกาศประเภทข้อมูลเช่นนั้น

 CREATE TABLE #TempTable(
 ID int,
 Date datetime,
 Name char(20))

ฉันจะแทรกข้อมูลที่เกี่ยวข้องซึ่งมีอยู่แล้วในตารางทางกายภาพภายในฐานข้อมูลได้อย่างไร

คำตอบ:


245
INSERT INTO #TempTable (ID, Date, Name) 
SELECT id, date, name 
FROM physical_table

5
อย่าลืมวางตารางเมื่อเสร็จแล้วมิฉะนั้นคุณอาจพบใน "มีวัตถุชื่อ '#TempTable' ในฐานข้อมูลอยู่แล้ว" ข้อผิดพลาด (คุณควรเรียกใช้แบบสอบถามอีกครั้ง ... )
Rhdr

คำถามแรกเกี่ยวกับตารางที่สร้างขึ้นแล้ว เนื่องจากเคล็ดลับมีประโยชน์จึงไม่ได้เชื่อมโยงกับคำถามของผู้แต่ง
alexsuslin

99

หากต้องการแทรกข้อมูลทั้งหมดจากคอลัมน์ทั้งหมดเพียงใช้สิ่งนี้:

SELECT * INTO #TempTable
FROM OriginalTable

อย่าลืมDROPตารางชั่วคราวหลังจากคุณสร้างมันเสร็จแล้วและก่อนที่คุณจะลองสร้างมันอีกครั้ง:

DROP TABLE #TempTable

9
ฉันชอบสิ่งนี้เพราะฉันไม่ต้องไปCREATEถึง#TempTable
MAbraham1


41

วิธีการของฉันInsertใน SQL Server นอกจากนี้ฉันมักจะตรวจสอบว่ามีตารางชั่วคราวอยู่หรือไม่

IF OBJECT_ID('tempdb..#MyTable') IS NOT NULL DROP Table #MyTable

SELECT b.Val as 'bVals'
  INTO #MyTable
FROM OtherTable as b

21
SELECT * 
INTO #TempTable
FROM table

คำตอบที่ง่ายที่สุดที่นี่จริงๆ คุณยังสามารถใช้ dbo.MyTable และมันจะเป็นตารางถาวร peasy ง่าย ๆ
Fandango68

15

ฉันได้จัดเตรียมสองวิธีในการแก้ปัญหาเดียวกัน

โซลูชันที่ 1: วิธีการนี้ประกอบด้วย 2 ขั้นตอนแรกสร้างตารางชั่วคราวด้วยชนิดข้อมูลที่ระบุถัดไปแทรกค่าจากตารางข้อมูลที่มีอยู่

CREATE TABLE #TempStudent(tempID  int, tempName  varchar(MAX) )
INSERT INTO #TempStudent(tempID, tempName) SELECT id, studName FROM students where id =1

SELECT * FROM #TempStudent

โซลูชันที่ 2: วิธีการนี้ง่าย ๆ ซึ่งคุณสามารถแทรกค่าลงในตารางชั่วคราวได้โดยตรงโดยที่ระบบจะดูแลการสร้างตารางชั่วคราวด้วยชนิดข้อมูลของตารางต้นฉบับแบบเดียวกัน

SELECT id, studName  INTO #TempStudent FROM students where id =1

SELECT * FROM #TempStudent

ในขณะที่ฉันรู้ว่านี่เป็นตารางชั่วคราวฉันยังคงไม่แนะนำใครให้ใช้ varchar (MAX)
bp_

8

แบบสอบถามที่เหมาะสม:

drop table #tmp_table

select new_acc_no, count(new_acc_no) as count1
into #tmp_table
from table
where unit_id = '0007' 
group by unit_id, new_acc_no
having count(new_acc_no) > 1

10
คำตอบนี้ไม่เกี่ยวข้องกับคำถาม คุณเอาข้อมูลนี้มาจากที่อื่น การถอดnew_acc_no, unit_id = '0007', group by, having count(new_acc_no) > 1ฯลฯ แปลงคำตอบในที่ซ้ำกันแน่นอนของ: stackoverflow.com/a/15762663/1476885
Zanon

7

หลังจากที่คุณสร้างตารางชั่วคราวคุณก็แค่ทำตามปกติ INSERT INTO () SELECT FROM

INSERT INTO #TempTable (id, Date, Name)
SELECT t.id, t.Date, t.Name
FROM yourTable t

5
insert into #temptable (col1, col2, col3)
select col1, col2, col3 from othertable

โปรดทราบว่านี่ถือเป็นการปฏิบัติที่ไม่ดี:

insert into #temptable 
select col1, col2, col3 from othertable

หากคำจำกัดความของตาราง temp นั้นมีการเปลี่ยนแปลงรหัสอาจล้มเหลวในขณะทำงาน



3

การดำเนินการขั้นพื้นฐานของตารางชั่วคราวได้รับด้านล่างแก้ไขและใช้ตามความต้องการของคุณ

- สร้างตารางชั่วคราว

CREATE TABLE #MyTempEmployeeTable(tempUserID  varchar(MAX), tempUserName  varchar(MAX) )

- ใส่ค่าลงในตารางอุณหภูมิ

INSERT INTO #MyTempEmployeeTable(tempUserID,tempUserName) SELECT userid,username FROM users where userid =21

- QUERY A TEMP Table [สิ่งนี้จะใช้ได้เฉพาะในเซสชัน / อินสแตนซ์เดียวกันเท่านั้นไม่ใช่ในอินสแตนซ์ของเซสชันผู้ใช้อื่น]

SELECT * FROM #MyTempEmployeeTable

- ลบค่าในตารางอุณหภูมิ

DELETE FROM #MyTempEmployeeTable

- วางตารางชั่วคราว

DROP TABLE #MyTempEmployeeTable

ในขณะที่ฉันรู้ว่านี่เป็นตารางชั่วคราวฉันยังคงไม่แนะนำใครให้ใช้ varchar (MAX)
bp_

@bp_ นี่เป็นตัวอย่างข้อมูลทั่วไปที่อธิบายผู้ใช้และผู้ใช้สามารถระบุชนิดข้อมูลและขนาดของมันตามความต้องการของแอปพลิเคชัน
BHUVANESH MOHANKUMAR

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