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

截断临时表与删除临时表Sql Server,sql,sql-server,temp-tables,Sql,Sql Server,Temp Tables,有两种方法可以检查是否存在temp table并重新创建它 一, 二, 如果有一个表名为tempTRUNCATE,那么使用一个表比另一个表有什么好处吗 IF Object_id('temp') IS NOT NULL TRUNCATE TABLE temp ELSE CREATE TABLE temp ( id INT ); 原始表有可能与ELSE语句中的模式不同,您将以糟糕的结构结束 CREATE TABLE temp(col VARCHAR(100)

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

一,

二,


如果有一个表名为
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);  

输出:

╔═════╗
║ col ║
╠═════╣
║   1 ║
╚═════╝
╔════╗
║ id ║
╠════╣
║  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);  

输出:

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

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


我相信您提供的两种方法产生不同的结果。是的,一种是使用Truncate,另一种是使用drop,但两种查询的目的是相同的。我认为您的第二种情况没有
,否则
我同意@Horia的说法。这就是为什么我认为这是不同的。您的第二个案例将不会在
删除
后重新创建该表。假设您打算在删除该表后重新创建该表。。无论如何,如果您不删除该表,它可能存在与您想要的模式不同的模式,因为之前的查询还使用了
#temp
进行其他查询。是的,您是对的,从未考虑过结构更改...)