2012-08-02 94 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