【发布时间】:2018-06-06 01:08:57
【问题描述】:
谁能解释为什么这段代码会导致错误?
BEGIN TRY
IF OBJECT_ID ('TEMPDB..#ABC') IS NOT NULL
BEGIN
DROP TABLE #ABC
END;
SELECT 1 AS A, 2 AS B
INTO #ABC;
END TRY
BEGIN CATCH
END CATCH;
DROP TABLE #ABC;
BEGIN TRY
IF OBJECT_ID ('TEMPDB..#ABC') IS NOT NULL
BEGIN
DROP TABLE #ABC
END;
SELECT 3 AS C, 4 AS D
INTO #ABC;
END TRY
BEGIN CATCH
END CATCH;
SELECT * FROM #ABC;
错误发生在第二个 TRY 和 CATCH 语句中,表明 #ABC 表已经存在,即使在第二个 TRY 块之前有一个 drop 语句,甚至在第二个 TRY 内,也有一个“IF OBJECT_ID... THEN DROP "声明。
消息 2714,第 16 级,状态 1,第 XX 行
数据库中已经有一个名为#ABC的对象
【问题讨论】:
-
我想知道 - 您是否使用了一些奇怪的 SQL Server SKU,您必须为使用的每个唯一名称支付额外的许可费用?临时表名称最长可达 116 个字符 - 为什么这里的两个临时表都使用 same 名称如此重要?
标签: sql sql-server