Chèn dữ liệu vào một bảng tạm thời


195

Sau khi đã tạo một bảng tạm thời và khai báo các kiểu dữ liệu như vậy;

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

Làm thế nào để tôi sau đó chèn dữ liệu có liên quan đã được giữ trên một bảng vật lý trong cơ sở dữ liệu?

Câu trả lời:


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

5
Hãy nhớ bỏ bảng sau khi bạn hoàn thành với nó, nếu không bạn có thể chạy vào "Đã có một đối tượng có tên '#TempTable' trong cơ sở dữ liệu." lỗi (nếu bạn chạy lại truy vấn ...)
Rhdr

Câu hỏi ban đầu là về bảng, đã được tạo. Vì mẹo này rất hữu ích, nó không liên quan đến câu hỏi của tác giả
alexsuslin

98

Để chèn tất cả dữ liệu từ tất cả các cột, chỉ cần sử dụng:

SELECT * INTO #TempTable
FROM OriginalTable

Đừng quên DROPbảng tạm thời sau khi bạn hoàn thành với nó và trước khi bạn thử tạo lại nó:

DROP TABLE #TempTable

9
Tôi thích điều này vì tôi không phải CREATE#TempTable
MAbraham1


41

Cách của tôi Inserttrong SQL Server. Ngoài ra tôi thường kiểm tra nếu một bảng tạm thời tồn tại.

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

Câu trả lời đơn giản nhất ở đây thực sự. Bạn cũng có thể sử dụng dbo.MyTable và nó sẽ là một bảng vĩnh viễn. Dễ dàng dễ dàng
Fandango68

15

Tôi đã cung cấp hai cách tiếp cận để giải quyết cùng một vấn đề,

Giải pháp 1: Cách tiếp cận này bao gồm 2 bước, đầu tiên tạo một bảng tạm thời với kiểu dữ liệu được chỉ định, tiếp theo chèn giá trị từ bảng dữ liệu hiện có.

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

SELECT * FROM #TempStudent

Giải pháp 2: Cách tiếp cận này đơn giản, trong đó bạn có thể chèn trực tiếp các giá trị vào bảng tạm thời, trong đó hệ thống tự động đảm nhiệm việc tạo bảng tạm thời với cùng loại dữ liệu của bảng gốc.

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

SELECT * FROM #TempStudent

Mặc dù tôi nhận ra rằng đây là bảng tạm thời, tôi vẫn sẽ không bao giờ đề nghị ai đó sử dụng varchar (MAX).
bp_

8

Truy vấn đúng:

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
Câu trả lời này không liên quan gì đến câu hỏi. Bạn đã lấy thông tin này từ một nơi khác. Loại bỏ new_acc_no, unit_id = '0007', group by, having count(new_acc_no) > 1, vv biến đổi câu trả lời trong một bản sao chính xác của: stackoverflow.com/a/15762663/1476885
Zanon

7

Sau khi bạn tạo bảng tạm thời, bạn sẽ làm bình thường 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

Lưu ý rằng điều này được coi là thực hành kém:

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

Nếu định nghĩa của bảng tạm thời là thay đổi, mã có thể thất bại khi chạy.


4
INSERT INTO #TempTable(ID, Date, Name)
SELECT OtherID, OtherDate, OtherName FROM PhysicalTable

3

Hoạt động cơ bản của bảng tạm thời được đưa ra dưới đây, sửa đổi và sử dụng theo yêu cầu của bạn,

- TẠO MỘT BẢNG TEMP

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

- XÁC NHẬN GIÁ TRỊ VÀO BẢNG TEMP

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

- BẢNG MỘT BẢNG TEMP [Điều này sẽ chỉ hoạt động trong cùng một phiên / Trường hợp, không phải trong phiên bản người dùng khác]

SELECT * FROM #MyTempEmployeeTable

- XÓA GIÁ TRỊ TRONG BẢNG TEMP

DELETE FROM #MyTempEmployeeTable

- DROP MỘT BẢNG TEMP

DROP TABLE #MyTempEmployeeTable

Mặc dù tôi nhận ra rằng đây là bảng tạm thời, tôi vẫn sẽ không bao giờ đề nghị ai đó sử dụng varchar (MAX).
bp_

@bp_ Đây là đoạn mã mẫu tổng quát giải thích người dùng và Người dùng có thể chỉ định loại dữ liệu và kích thước của nó dựa trên yêu cầu ứng dụng của họ.
BHUVANESH MOHANKUMAR

2
insert #temptable
select idfield, datefield, namefield from yourrealtable
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.