我有一个查询,我从表中插入一些值:
SELECT ID, NAME INTO #tmpTable1
FROM TableOriginal
第一次执行没问题,如果我在SSMS(Microsoft Sql Server Management Studio)中按F5(运行),则会出现错误:
消息 2714,第 16 级,状态 6,第 4 行
数据库中已有一个名为“#tmpTable1”的对象。
好的。我决定在插入数据之前进行检查TableOriginal
to #tmpTable1
using:
IF OBJECT_ID('tempdb.#tmpTable1') IS NOT NULL
DROP TABLE #tmpTable1
不起作用,错误再次显示如上。
我看到在tempdb
数据库临时表名如下:
dbo.#tmpTable1__________________0000007
为什么?每次创建临时表(使用第一个查询)时,表名都会在MSSMS中自动生成?
如何删除现有的临时表以使用新值创建新表?
你已经很接近了 - 你需要在支票上使用两个点:
IF OBJECT_ID('tempdb..#tmpTable1') IS NOT NULL
**
|
use two dots here!
基本上,这就是说:签入tempDB
我不关心表的模式
正如 Joe 所说:这不是 100% 正确:它不会检查每个模式 - 它只会检查默认所有者的模式 - 通常dbo
。所以这也行得通:
IF OBJECT_ID('tempdb.dbo.#tmpTable1') IS NOT NULL
如果您碰巧在默认所有者以外的架构中创建对象,那么您需要显式指定您所引用的架构。但是临时表在tempDB
确实在创造dbo
schema.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)