Pregunta ¿Cómo descartar una tabla si existe en SQL Server?


El nombre de la tabla es Scores.

¿Es correcto hacer lo siguiente?

IF EXISTS(SELECT *
          FROM   dbo.Scores)
  DROP TABLE dbo.Scores 

531
2017-10-25 09:05


origen


Respuestas:


¿Es correcto hacer lo siguiente?

IF EXISTS(SELECT *
          FROM   dbo.Scores)
  DROP TABLE dbo.Scores

No.  Eso soltará la tabla solo si contiene alguna fila (y generará un error si la tabla no existe).

En cambio, para una mesa permanente, puede usar

IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL 
  DROP TABLE dbo.Scores; 

O bien, para una tabla temporal, puede usar

IF OBJECT_ID('tempdb.dbo.#T', 'U') IS NOT NULL
  DROP TABLE #T; 

Para cualquiera en SQL Server 2016+ señalaré esta respuesta - que tiene una mejor manera.


1080
2017-10-25 09:07



Desde SQL Server 2016 puedes usar

DROP TABLE IF EXISTS dbo.Scores

Referencia: CAÍDA SI EXISTE - algo nuevo en SQL Server 2016

Pronto estará en la base de datos SQL Azure.


188
2017-11-03 11:21



La forma ANSI SQL / multiplataforma es usar el INFORMATION_SCHEMA, que fue diseñado específicamente para consultar metadatos sobre objetos dentro de bases de datos SQL.

if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'Scores' AND TABLE_SCHEMA = 'dbo')
    drop table dbo.Scores;

La mayoría de los servidores RDBMS modernos proporcionan, como mínimo, soporte básico INFORMATION_SCHEMA, que incluye: MySQL, Postgres, Oráculo, IBM DB2y Microsoft SQL Server 7.0 (y superior).


125
2018-01-12 04:02



He visto tantos que realmente no funcionan. cuando se crea una tabla temporal, debe eliminarse de la tempdb!

El único código que funciona es:

IF OBJECT_ID('tempdb..#tempdbname') IS NOT NULL     --Remove dbo here 
    DROP TABLE #tempdbname   -- Remoeve "tempdb.dbo"

48
2017-08-01 11:06



O:

if exists (select * from sys.objects where name = 'Scores' and type = 'u')
    drop table Scores

21
2017-10-25 13:31



Espero que esto ayude:

begin try drop table #tempTable end try
begin catch end catch

18
2017-09-26 15:35



Escribí un pequeño UDF que devuelve 1 si su argumento es el nombre de una tabla existente, 0 en caso contrario:

CREATE FUNCTION [dbo].[Table_exists]
(
    @TableName VARCHAR(200)
)
    RETURNS BIT
AS
BEGIN
    If Exists(select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = @TableName)
        RETURN 1;

    RETURN 0;
END

GO

Para eliminar la tabla User si existe, llámalo así:

IF [dbo].[Table_exists]('User') = 1 Drop table [User]

18
2018-02-28 20:13



Simple es eso:

IF OBJECT_ID(dbo.TableName, 'U') IS NOT NULL
DROP TABLE dbo.TableName

dónde dbo.TableName es tu mesa deseada y 'U' es type de tu table.


6
2018-04-13 10:33



DROP TABLE IF EXISTS dbo.Scores

O

IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL 
DROP TABLE dbo.Scores; 

U es tuyo table type


6
2017-11-08 11:51



IF EXISTS (SELECT NAME FROM SYS.OBJECTS WHERE object_id = OBJECT_ID(N'Scores') AND TYPE in (N'U'))
    DROP TABLE Scores
GO

3
2018-03-31 05:25