在SQL Server 2008中删除\创建临时表
我有这样的SQL代码在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
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