【发布时间】:2013-12-30 14:50:19
【问题描述】:
我有这样的 SQL 代码
IF Object_id('tempdb..#empDate) IS NOT NULL
DROP TABLE #empDate
CREATE TABLE #empDate
(
[empID] INT,
[AddLoc] VARCHAR(1000)
)
在上面的代码之后还有几行SQL,然后重复。
我收到以下错误。
消息 2714,第 16 层,状态 1,第 589 行
数据库中已经有一个名为“#empDate”的对象。
我换了
IF Object_id('tempdb..#empDate) IS NOT NULL
与
IF Object_id('tempdb..#empDate%) IS NOT NULL
正如论坛上写的那样,SQL Server 会将数字附加到后续的临时表中。
来源: Check if a temporary table exists and delete if it exists before creating a temporary table
我在 Windows 7 Enterprise 上使用 Microsoft SQL Server 2008。
我无法理解错误的原因。
请帮忙。
【问题讨论】:
-
If EXISTS(Select * From tempdb.dbo.sysobjects Where ID = OBJECT_ID(N'tempdb..#empDate')) Begin Drop Table #empDate End -
为什么要检查表是否存在两次?如果您在同一会话中创建它,您就知道它存在。你只是使用了一个本地临时表,所以它不会受到其他会话的影响,只需跳过第二条 create table 语句,或者按照 M Ali 的建议执行并分批运行。
-
你为什么不在这里给出一个正确的问题标题? “SQL Server 2008 中的临时表” 对我来说实际上不是问题!
-
@huMptyduMpty :现在标题还好吗?
-
@user2560781:似乎比以前好多了:)。但不要在标题上包含标签,即
sql-server 2008。请阅读Should questions include “tags” in their titles?
标签: sql sql-server sql-server-2008