向临时表插入数据

242

创建了一个临时表并声明了数据类型,如下所示:

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

如何将已经保存在数据库中的相关数据插入到物理表中?

13个回答

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

12
完成使用后请记得删除表格,否则您可能会遇到“数据库中已经存在名为 '#TempTable' 的对象”的错误(如果再次运行查询的话...)。 - Rhdr
5
@alexsuslin 这是有关联的,不要这样。 - Josué Zatarain
如果存在 #MyTable 表,则删除该表 - Nicholas Franceschina

139

要插入所有列中的所有数据,只需使用此代码:

SELECT * INTO #TempTable
FROM OriginalTable

在使用完临时表后,别忘了在重新创建之前删除(DROP)它:

DROP TABLE #TempTable

17
我喜欢这个,因为我不必自己创建 #TempTable。 - MAbraham1
1
如果存在,可以使用以下前缀来删除表格:drop table if exists #MyTable - Nicholas Franceschina

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

49

我在SQL Server中插入数据的方式。而且我通常检查临时表是否存在。

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

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

1
同时:如果存在则删除表 #MyTable - Nicholas Franceschina

23

我提供了两种解决同一问题的方法,

方案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_

22
SELECT * 
INTO #TempTable
FROM table

这里的最简单的答案。您还可以使用dbo.MyTable,它将是一个永久表。非常容易。 - Fandango68

9

在创建临时表后,您只需执行普通的 INSERT INTO () SELECT FROM 语句即可。

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

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

13
这个回答与问题无关。您从其他地方获取了这些信息。删除“new_acc_no”、“unit_id ='0007'”、“group by”、“having count(new_acc_no)> 1”等内容,将使答案完全重复:https://dev59.com/KWgt5IYBdhLWcg3w2A77#15762663 - Zanon

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

请注意,这被视为不良实践:
insert into #temptable 
select col1, col2, col3 from othertable

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

6

以下是临时表的基本操作。请根据您的需求进行修改和使用。

-- 创建临时表

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

-- 将值插入临时表

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

-- 查询临时表 [这仅在同一会话/实例中有效,而不是在其他用户会话实例中]

SELECT * FROM #MyTempEmployeeTable

-- 在临时表中删除值

DELETE FROM #MyTempEmployeeTable

-- 删除临时表

DROP TABLE #MyTempEmployeeTable

虽然我知道这是一个临时表,但我仍然不建议任何人使用varchar(MAX)。 - bp_
@bp_ 这是一个通用的示例代码片段,它解释了用户可以根据其应用程序要求指定数据类型和大小。 - BHUVANESH MOHANKUMAR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接