【发布时间】:2014-12-30 11:59:15
【问题描述】:
我了解调试器在做什么,但我并不完全同意,因为以下内容应该可以正常工作:
IF OBJECT_ID('TEMPDB..#extract') IS NOT NULL DROP TABLE #extract;
CREATE TABLE #extract(
x VARCHAR(100),
NumX_Rank NUMERIC(18,2),
NumG_Rank NUMERIC(18,2)
);
IF OBJECT_ID('TEMPDB..#extract') IS NOT NULL DROP TABLE #extract;
CREATE TABLE #extract(
x VARCHAR(100),
NumX_Rank NUMERIC(18,2),
NumG_Rank NUMERIC(18,2)
);
错误信息如下:
Msg 2714, Level 16, State 1, Line 15 已经有一个对象名为 数据库中的“#extract”。
请注意 - 我在整个脚本中声明了我需要的变量,即脚本是存储过程的一部分,并且变量应该具有整个过程的范围。
【问题讨论】:
-
如果要在整个过程中使用相同的临时表结构,为什么不使用
TRUNCATE TABLE而不是DROP后跟CREATE? -
@alroc 公平的建议。不使用
GO或TRUNCATE是否可以? -
这个问题没有意义。我建议您使用
TRUNCATE,但您问是否可以在不使用TRUNCATE的情况下使用TRUNCATE?我的意思是:创建表一次。如果您需要清空并重新填充它,请使用TRUNCATE TABLE而不是DROPping 来重新创建它。 -
为什么不使用唯一的临时表名称?是否明确需要将它们都命名为#Extract?此外,您正在使用术语“脚本”和“程序”。如果此 SQL 在存储过程内部,则需要知道这一点才能回答问题,因为
GO不能在过程内部使用。
标签: sql sql-server tsql sql-server-2012