我有一个查询,我从表中插入一些值:
SELECT ID, NAME INTO #tmpTable1
FROM TableOriginal
第一次执行没问题,如果我在MSSMS(Microsoft Sql Server Management Studio)中按F5(运行),就会出现错误:
Msg 2714, Level 16, State 6, Line 4
There is already an object named '#tmpTable1' in the database.
好。我决定在将数据从 TableOriginal
插入到 #tmpTable1
之前使用以下方法进行检查:
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!
基本上,这就是说: checkin tempDB
,我不关心表采用什么模式
正如 Joe 所说:这不是 100% 正确:它不会检查每个架构 - 它只会检查默认所有者的架构 - 通常是 dbo
。所以这也行得通:
IF OBJECT_ID('tempdb.dbo.#tmpTable1') IS NOT NULL
如果您碰巧在默认所有者以外的架构中创建对象,则需要显式指定您所引用的架构。但 tempDB
中的临时表确实是在 dbo
架构中创建的。
关于sql - 如何正确检查SQL Server 2005中是否存在临时表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11986552/