2012-08-02 131 views
131

在創建臨時表並聲明數據類型之後,將數據插入臨時表

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

我該如何在數據庫中的物理表上插入相關數據?

回答

165
INSERT INTO #TempTable (ID, Date, Name) 
SELECT id, date, name 
FROM physical_table 
2
insert #temptable 
select idfield, datefield, namefield from yourrealtable 
4

創建臨時表之後,你只想做一個正常的INSERT INTO() SELECT FROM

INSERT INTO #TempTable (id, Date, Name) 
SELECT t.id, t.Date, t.Name 
FROM yourTable t 
4
INSERT INTO #TempTable(ID, Date, Name) 
SELECT OtherID, OtherDate, OtherName FROM PhysicalTable 
5
insert into #temptable (col1, col2, col3) 
select col1, col2, col3 from othertable 

請注意,這被認爲是窮人的做法:

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

如果臨時表的定義發生更改,則代碼在運行時可能會失敗。

53
SELECT ID , Date , Name into #temp from [TableName] 
7

正確的查詢:

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 
+8

此答案與問題無關。你從其他地方獲取這些信息。刪除'new_acc_no','unit_id ='0007'','group by','count(new_acc_no)> 1'等等將轉換成以下精確副本的答案:http://stackoverflow.com/a/15762663/ 1476885 – Zanon 2015-08-10 20:00:59

23

我在SQL Server的Insert方式。另外我通常會檢查是否存在臨時表。

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

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

從所有列中插入的所有數據,只需要使用這樣的:

SELECT * INTO #TempTable 
FROM OriginalTable 

你已經完成了它之後,你再次嘗試建立它之前不要忘記DROP臨時表:

DROP TABLE #TempTable 
+3

我喜歡這個,因爲我不需要'CREATE'#TempTable' – MAbraham1 2015-02-23 20:52:58

9
SELECT * 
INTO #TempTable 
FROM table 
+0

這裏最簡單的答案。你也可以使用dbo.MyTable,它將是一個永久表。容易peasy – Fandango68 2017-01-23 07:17:37

1

節奏的基本操作郭寶宏表如下,修改和按您的要求使用,

- 創建臨時表

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

- 值插入到一個臨時表

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

- QUERY TEMP TABLE [這將只在同一會話/實例中工作,不在其他用戶會話實例中]

SELECT * FROM #MyTempEmployeeTable 

- DELETE VALUE IN TEMP表

DELETE FROM #MyTempEmployeeTable 

- DROP臨時表

DROP TABLE #MyTempEmployeeTable 
+0

雖然我認識到這是一個臨時表,我仍然不會推薦有人使用varchar(MAX)。 – 2018-02-08 18:41:40

+0

@bp_這是一個廣義的示例片段,它解釋了用戶,用戶可以根據他們的應用程序需求指定數據類型和大小。 – 2018-02-08 21:10:32

3

我已經提供了兩種方法來解決同樣的問題,

解決方案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 
+0

雖然我認識到這是一個臨時表,但我仍然不會推薦使用varchar(MAX)。 – 2018-02-08 18:43:22