【发布时间】:2018-04-12 10:44:37
【问题描述】:
我正在运行一个 sql server 脚本,我正在检查它是否存在全局临时表,然后删除它。但是我观察到,即使在表存在之后,编译器也不会进入删除表范围。
IF OBJECT_ID('tempdb..##TuidSubgroupAuthrealm') IS NOT NULL
BEGIN
DROP TABLE ##TuidSubgroupAuthrealm
END
CREATE TABLE ##TuidSubgroupAuthrealm
(
TUID INT NOT NULL,
TravelProductId INT NOT NULL,
AuthRealmId INT NOT NULL
PRIMARY KEY (TUID, TravelProductId)
)
select * from ##TuidSubgroupAuthrealm 查询时,我得到了表,但是脚本在创建表时中断。有什么原因以及如何解决?
【问题讨论】:
-
我看不出代码有什么问题。
-
如果您使用的是全局表,我猜您有使用它们的并发进程。也许你有赛车条件来放弃/创造它?
-
为什么要使用全局临时表?一般来说,它们不是一个好主意。
-
不,我几天前创建了这个同名的表。我知道我是唯一一个运行此脚本的人,除了原始创建者(即较旧的连接)之外,没有其他连接正在使用此脚本。使用全局临时表的原因是为了调试来自另一个连接的并行数据处理。
-
您真的需要一个全局临时表,即该临时表是否在创建范围之外的会话中使用?如果没有,请改用本地临时表。此外,您应该在不再需要临时表时立即删除它。反转它,即在你需要创建它之前删除它,不是你应该如何处理这些的。它表明您的脚本存在问题,因为当您输入脚本并假设它可能存在时,即它可以在另一个范围内使用,然后您继续删除它?你知道我在说什么吗?
标签: sql-server sql-server-2008 sql-server-2012