将数据插入临时表


195

创建了临时表并声明数据类型后,就这样;

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

然后,如何插入数据库中物理表上已经保存的相关数据?

Answers:


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

5
切记一旦完成处理就将其删除,否则您可能会遇到“数据库中已经有一个名为'#TempTable'的对象”。错误(您应该再次运行查询...)
Rhdr,

最初的问题是关于已经创建的表的。由于该提示有用,因此与作者的问题
无关

98

要插入所有列中的所有数据,只需使用以下命令:

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


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_nounit_id = '0007'group byhaving 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

如果临时表的定义发生更改,则代码可能会在运行时失败。



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

2
insert #temptable
select idfield, datefield, namefield from yourrealtable
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.