截断临时表与删除临时表Sql Server



有两种方法可以检查temp table的存在并重新创建它

1.

IF Object_id('TEMPDB..#temp') IS NOT NULL
  TRUNCATE TABLE #temp
ELSE
  CREATE TABLE #temp
    (
       id INT
    ) 

2.

IF Object_id('TEMPDB..#temp') IS NOT NULL
  DROP TABLE #temp
  CREATE TABLE #temp
    (
       id INT
    ) 

使用一个比另一个

有什么好处吗

如果存在名为temp TRUNCATE的表,则会创建新表。

IF Object_id('temp') IS NOT NULL
  TRUNCATE TABLE temp
ELSE
   CREATE TABLE temp
    (
       id INT
    );

原始表可能具有不同于ELSE语句的模式,您将以错误的结构结束。

CREATE TABLE temp(col VARCHAR(100));
INSERT INTO temp VALUES ('a');
IF Object_id('temp') IS NOT NULL
  TRUNCATE TABLE temp
ELSE
    CREATE TABLE temp
    (
       id INT
    );
INSERT INTO temp VALUES (1);  

SqlFiddleDemo

输出:

╔═════╗
║ col ║
╠═════╣
║   1 ║
╚═════╝

如果有一个名为temp的表,请删除它。然后重新创建它。

IF Object_id('TEMPDB..#temp') IS NOT NULL
  DROP TABLE #temp
CREATE TABLE #temp
(
       id INT
); 

在本例中,您始终可以确保获得CREATE语句中定义的结构。

CREATE TABLE temp(col VARCHAR(100));
INSERT INTO temp VALUES ('a');
IF Object_id('temp') IS NOT NULL
  DROP TABLE temp
CREATE TABLE temp
(
       id INT
)    
INSERT INTO temp
VALUES (1);  

SqlFiddleDemo2

输出:

╔════╗
║ id ║
╠════╣
║  1 ║
╚════╝

如果表不存在,两种方法都返回相同的结构:

SqlFiddleDemo_3SqlFiddleDemo_4

最新更新