sql - 如何正确检查SQL Server 2005中是否存在临时表?

标签 sql sql-server sql-server-2005

我有一个查询,我从表中插入一些值:

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/

相关文章:

c# - 不带主键的 LINQ DeleteOnSubmit

sql - 在列上执行数学的更优雅的方式

PHP fetch_assoc 返回值,循环

java - 为什么我在将 java 程序连接到 sql server 时收到此错误

SQL方言翻译桥?

asp.net - 在 SQL SERVER 2005 上启用 CLR 是否存在任何安全问题?

sql - 容纳一对多和一对多(或一对*)关系的最佳实践是什么?

sql - SQL try catch 由最近的变量引起的确切错误

sql-server - 数据库优化顾问建议创建现有索引

c# - LINQ-to-SQL 连接中的 DefaultIfEmpty 导致重复