临时表的问题

时间:2022-03-14 09:05:23
 使用如下语句将数据资料表拷贝到#临时表3:
select * into #临时表3 from 数据资料表
运行后显示:
消息 2714,级别 16,状态 6,第 1 行
数据库中已存在名为 '#临时表3' 的对象。


6 个解决方案

#1


mysql的下列语法在 MS-SQL Server中不行:
 CREATE TABLE #临时表3 SELECT * from 数据资料表

#2


在查询窗口反复执行了这个语句就会这样,drop table #临时表3   执行下就可以了。

#3


--通常的做法
--事前检查并删除,不必要,只是防止你原来的不正确写法有遗留吧,
--加了也无妨,万无一失吧
IF OBJECT_ID('tempdb..#tmp') IS NOT NULL
DROP TABLE #tmp

--select into 插入
SELECT * 
INTO #tmp 
FROM MASTER.dbo.spt_values AS sv

--用完清除
DROP TABLE #tmp

#4


可以在插入之前判断一下,如果存在就删除。

#5


本帖最后由 roy_88 于 2018-03-12 10:12:28 编辑
本地临时表仅在当前会话中可见,而全局临时表在所有会话中都可见。

#6


同一会话时检查是会报错的,如下:
SELECT 1 AS ID INTO #1

DROP TABLE #1

SELECT 1 AS ID INTO #1

会出现错误
消息 2714,级别 16,状态 1,第 5 行
数据库中已存在名为 '#1' 的对象。


处理方法:定义临时表名不相同

#1


mysql的下列语法在 MS-SQL Server中不行:
 CREATE TABLE #临时表3 SELECT * from 数据资料表

#2


在查询窗口反复执行了这个语句就会这样,drop table #临时表3   执行下就可以了。

#3


--通常的做法
--事前检查并删除,不必要,只是防止你原来的不正确写法有遗留吧,
--加了也无妨,万无一失吧
IF OBJECT_ID('tempdb..#tmp') IS NOT NULL
DROP TABLE #tmp

--select into 插入
SELECT * 
INTO #tmp 
FROM MASTER.dbo.spt_values AS sv

--用完清除
DROP TABLE #tmp

#4


可以在插入之前判断一下,如果存在就删除。

#5


本帖最后由 roy_88 于 2018-03-12 10:12:28 编辑
本地临时表仅在当前会话中可见,而全局临时表在所有会话中都可见。

#6


同一会话时检查是会报错的,如下:
SELECT 1 AS ID INTO #1

DROP TABLE #1

SELECT 1 AS ID INTO #1

会出现错误
消息 2714,级别 16,状态 1,第 5 行
数据库中已存在名为 '#1' 的对象。


处理方法:定义临时表名不相同