drop - verificar si existe una tabla en sql server




¿Cómo soltar una tabla si existe en SQL Server? (8)

¿Es correcto hacer lo siguiente?

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

No. Eso eliminará la tabla solo si contiene filas (y generará un error si la tabla no existe).

En cambio, para una mesa permanente puedes usar

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

O bien, para una tabla temporal puede utilizar

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

SQL Server 2016+ tiene una mejor manera, usando DROP TABLE IF EXISTS … Vea la respuesta por @Jovan .

El nombre de la tabla es Scores .

¿Es correcto hacer lo siguiente?

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


Escribí un pequeño UDF que devuelve 1 si su argumento es el nombre de una tabla existente, 0 de lo 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 el User tabla, si existe, llámelo así:

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

Espero que esto ayude:

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

He visto tantos que realmente no funcionan. cuando se crea una tabla temporal, se debe eliminar del 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"

La forma ANSI SQL / multiplataforma es usar 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 ofrecen, al menos, soporte básico de INFORMATION_SCHEMA, que incluye: MySQL , Postgres , Oracle , IBM DB2 y Microsoft SQL Server 7.0 (y más) .


Simple es que:

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

donde dbo.TableName es su tabla deseada y 'U' es el type de su table .


Yo suelo:

if exists (select * 
           from sys.tables 
           where name = 'tableName' 
           and schema_id = schema_id('dbo'))
begin
    drop table dbo.tableName
end






sql-server