【发布时间】:2012-09-06 14:45:17
【问题描述】:
在 SQL Server 存储过程中使用临时表时,首选做法是;
1) 创建临时表,填充它,使用它然后删除它
CREATE TABLE #MyTable ( ... )
-- Do stuff
DROP TABLE #MyTable
2) 检查是否存在,如果存在则删除它,然后创建并使用它
IF object_id('tempdb..#MyTable') IS NOT NULL
DROP TABLE #MyTable
CREATE TABLE #MyTable ( ... )
3) 创建它并在超出范围时让 SQL Server 清理它
CREATE TABLE #MyTable ( ... )
-- Do Stuff
我在this answer 及其关联的 cmets 中读到,这在临时表被重用的情况下很有用,SQL Server 将截断表但保留结构以节省时间。
我的存储过程可能会被非常频繁地调用,但它只包含几列,所以我不知道这在我的情况下到底有多有利。
【问题讨论】:
-
或者使用
SELECT/INTO隐式创建表。 -
@HABO 这有什么帮助?如果表已经存在,则会发生错误,问题仍然是是否需要删除它 - 如果表是使用 SELECT INTO 创建的,为什么这个问题会消失?
-
@AaronBertrand - 抱歉,我以为我在标题中看到了“创造”这个词。知道您对完整性的偏好,我觉得提出
SELECT/INTO的问题并非完全偏离主题。再一次,我是罪魁祸首。