2015-08-17 4 views
3

Есть два способа, чтобы проверить наличие temp table и воссоздает егоОкругление временной таблицы Vs падение температуры таблица Sql Server

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 
    ) 

есть ли преимущество использования одного над другим

+0

Я считаю, что два способа Обеспечиваются производит различный результат. –

+0

yes one использует Truncate, другой использует drop, но оба запроса предназначены для того, чтобы делать то же самое. –

+0

Я думаю, что ваш второй случай без 'ELSE' – Horia

ответ

2

Если есть таблица под названием tempTRUNCATE иначе создать новую таблицу.

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_3 SqlFiddleDemo_4

+1

Да, вы правы, никогда не думали о смене структуры .. :) –