SQL Server 2012中临时表#TBL1删除失效导致创建失败问题排查
排查SQL Server 2012临时表重复创建错误
首先,一眼就能看到你代码里的低级拼写错误——你要删除的临时表是#TBL1,但写的却是DROP TABLE dbo.#TBL,少了个1!这是导致错误最直接的原因:数据库找不到#TBL,自然不会删除已存在的#TBL1,重新运行时就会提示对象已存在。
除了拼写问题,还有几个关于临时表检查的细节需要注意:
本地临时表(以
#开头)并不属于dbo架构,实际存储在tempdb中,所以正确的检查写法应该是:IF OBJECT_ID('tempdb..#TBL1', 'U') IS NOT NULL DROP TABLE #TBL1;或者简化成
OBJECT_ID('#TBL1')也能生效,但指定tempdb更严谨,避免和其他同名对象混淆。另外,如果你的创建表语句和检查语句在同一个SQL批次里(没有用
GO分隔),SQL Server在编译阶段就会发现#TBL1要被创建两次,即使你写了删除语句也会报错。这种情况可以把删除和创建分成不同批次,或者用动态SQL绕开编译检查:IF OBJECT_ID('tempdb..#TBL1', 'U') IS NOT NULL DROP TABLE #TBL1; GO -- 分隔批次 CREATE TABLE #TBL1 ( -- 表结构定义 );
把拼写错误修正,再调整检查语句的写法,应该就能解决你的问题了。
内容的提问来源于stack exchange,提问作者Kazem Danesh
相关产品推荐
相关产品推荐

