在SQL Server 2008中删除\创建临时表

在SQL Server 2008中删除\创建临时表,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有这样的SQL代码 IF Object_id('tempdb..#empDate) IS NOT NULL DROP TABLE #empDate CREATE TABLE #empDate ( [empID] INT, [AddLoc] VARCHAR(1000) ) 在上面的代码之后,接着是一些SQL行,然后重复 我得到以下错误 Msg 2714,16级,状态1,第589行 数据库中已存在名为“empDate”的对象 我换了新的 IF Object_i

我有这样的SQL代码

IF Object_id('tempdb..#empDate) IS NOT NULL
  DROP TABLE #empDate
CREATE TABLE #empDate
  (
     [empID]   INT,
     [AddLoc] VARCHAR(1000)
  )
在上面的代码之后,接着是一些SQL行,然后重复

我得到以下错误

Msg 2714,16级,状态1,第589行 数据库中已存在名为“empDate”的对象

我换了新的

IF Object_id('tempdb..#empDate) IS NOT NULL

正如在论坛上所写的那样,SQL Server将编号附加到后续的临时表中

资料来源:

我正在Windows 7 Enterprise上使用Microsoft SQL Server 2008

我无法理解错误的原因


请帮忙。

我会在没有任何预先检查的情况下放下你的桌子

然后干净地编写/运行脚本

使用临时表后,将其放在脚本末尾

所以无条件地运行这个

DROP TABLE #empDate

然后编写/运行脚本,确保脚本末尾有这一行。

用对象id传递数据库名称

例如:

DECLARE @db_id int;
DECLARE @object_id int;
SET @db_id = DB_ID(N'AdventureWorks2012');
SET @object_id = OBJECT_ID(N'AdventureWorks2012.Person.Address');
IF @db_id IS NULL 
BEGIN;
PRINT N'Invalid database';
END;
ELSE IF @object_id IS NULL
BEGIN;
PRINT N'Invalid object';
END;
ELSE
BEGIN;
SELECT * FROM sys.dm_db_index_operational_stats(@db_id, @object_id, NULL, NULL);
END;
GO
样本一

这将失败。。。。。。 再次执行相同的代码,将抛出您现在得到的错误

IF Object_id('tempdb..#empDate') IS NOT NULL
 BEGIN
  DROP TABLE #empDate
 END 

CREATE TABLE #empDate
  (
     [empID]   INT,
     [AddLoc] VARCHAR(1000)
  )


IF Object_id('tempdb..#empDate') IS NOT NULL
 BEGIN
  DROP TABLE #empDate
 END 

CREATE TABLE #empDate
  (
     [empID]   INT,
     [AddLoc] VARCHAR(1000)
  )
样本二固定

但如果您将所有语句分为不同的批,它们将成功执行,如下所示

CREATE TABLE #empDate
  (
     [empID]   INT,
     [AddLoc] VARCHAR(1000)
  )
GO

DROP TABLE #empDate
GO

CREATE TABLE #empDate
  (
     [empID]   INT,
     [AddLoc] VARCHAR(1000)
  )
GO

如果存在,请从tempdb.dbo.sysobjects中选择*,其中ID=OBJECT\u IDN'tempdb..empDate'开始删除表empDate end为什么需要检查表是否存在两次?如果您在同一会话中创建了它,您就知道它存在。您只使用一个本地临时表,这样它就不会受到其他会话的影响,只需跳过第二个CREATETABLE语句,或者按照M Ali的建议进行操作,并分多批运行。为什么不在此处给出一个适当的问题标题?SQL Server 2008中的临时表对我来说并不是什么问题@huMptyduMpty:标题现在好了吗?@user2560781:似乎比以前好多了:。但不要在标题上包括标签,即sql server 2008。请不要看问题,很高兴它有帮助。
IF Object_id('tempdb..#empDate') IS NOT NULL
 BEGIN
  DROP TABLE #empDate
 END 

CREATE TABLE #empDate
  (
     [empID]   INT,
     [AddLoc] VARCHAR(1000)
  )

GO      --<-- Adding this Batch Separator will eliminate the Error

IF Object_id('tempdb..#empDate') IS NOT NULL
 BEGIN
  DROP TABLE #empDate
 END 

CREATE TABLE #empDate
  (
     [empID]   INT,
     [AddLoc] VARCHAR(1000)
  )
CREATE TABLE #empDate
  (
     [empID]   INT,
     [AddLoc] VARCHAR(1000)
  )


DROP TABLE #empDate


CREATE TABLE #empDate
  (
     [empID]   INT,
     [AddLoc] VARCHAR(1000)
  )
CREATE TABLE #empDate
  (
     [empID]   INT,
     [AddLoc] VARCHAR(1000)
  )
GO

DROP TABLE #empDate
GO

CREATE TABLE #empDate
  (
     [empID]   INT,
     [AddLoc] VARCHAR(1000)
  )
GO