El nombre de la tabla es Scores.

Es correcto el siguiente?

IF EXISTS(SELECT *
          FROM   dbo.Scores)
  DROP TABLE dbo.Scores 
InformationsquelleAutor tmaster | 2011-10-25

13 Comentarios

  1. 1276

    Es correcto el siguiente?

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

    No. Que tendrá la baja de la tabla, pero sólo si contiene todas las filas (y se producirá un error si la tabla no existe).

    Lugar, para una tabla permanente puede utilizar

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

    O, 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, utilizando DROP TABLE IF EXISTS …. Ver la respuesta por @Jovan.

    • Fwiw — El 'U' para el segundo parámetro al parecer significa «Sólo buscan objetos con este nombre, que son las tablas». Una fuente. Así OBJECT_ID('TableName') no mal, pero no es muy precisa, ya sea, por lo tanto 'U' en @Martin, excelente respuesta.
    • Respecto a la segunda param; aquí es otra fuente , he utilizado la » V » para una Vista.
    • Estoy sorprendida. No encuentra la versión más recogido y exhaustiva?
    • incluso de una manera más suave, entre otras cosas,» no es un estilo de redacción que iba a usar. Y yo deliberadamente no incluyen el código de otra persona responda. En mi experiencia, que impide que la otra respuesta de conseguir los votos que de otra manera haría.
    • Es su respuesta es su llamada. Sin embargo, no estoy de acuerdo en que la inclusión de la sintaxis (que de hecho es mucho más suave y sin duda la captura) es una sabia decisión. Habiendo dicho eso, es su decisión. 🙂
    • La gente puede visitar la otra respuesta y upvote allí.
    • HOLA se puede explicar de mí lo que este segundo parámetro significa en OBJECT_ID(‘tempdb.dbo.#T’, ‘U’), por ejemplo este ‘U’ ?
    • significa «Tabla definida por el Usuario». «»Será un interno, definidas por el sistema, de mesa. Una lista completa está aquí msdn.microsoft.com/en-us/library/ms190324.aspx
    • Estoy usando SQL Server 2014. La anterior funcionó bien para mí sin el «dbo.» delante de los nombres de tabla.
    • Esta respuesta tal vez debería incluir la nueva DROP TABLE IF EXISTS ... manera de eliminar una tabla, SQL Server 2016 (13.x) y por encima.
    • que está cubierto en la segunda respuesta en esta página, vinculados a partir de mi respuesta.

  2. 145

    El ANSI SQL/de la cruz-plataforma de forma es utilizar el INFORMATION_SCHEMA, que ha sido diseñado específicamente para la consulta de datos de metadatos acerca de los 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;

    RDBMS la mayoría de los modernos servidores de proporcionar, al menos, básica INFORMATION_SCHEMA de apoyo, incluyendo: MySQL, Postgres, Oracle, IBM DB2, y Microsoft SQL Server 7.0 (y mayor).

    • Tal vez, simplemente SELECCIONE 1 en lugar de SELECT *…
    • La función exists es optimizado por el compilador, básicamente, de ignorar la cláusula select. Sólo comprueba a ver si más de cero registros son tirados, y no el contenido. Por desgracia, no tengo una web de referencia, pero tengo un libro de referencia. Página 120 de «Training Kit (Examen 70-461) Querying Microsoft SQL Server 2012 (MCSA)», ISBN 0735666059
    • Encontrado una web de referencia en la búsqueda de libros de google. books.google.com/… Además, he leído originalmente esta en SQL Server 6.5 manual que se incluye con el software. Así, no es algo nuevo.
    • 1 tiene un rendimiento más que select * ?
    • Yo en realidad no me di cuenta de que era discutible…blog.sqlauthority.com/2008/02/26/…, pero es cierto que se deben especificar las columnas en un Select. Parece que jveazey proporciona una mejor explicación de todos modos.
    • Es el if exists ansi?
    • Tenga cuidado si usted tiene más de un esquema en la base de datos. Usted puede ser que necesite para ser específico acerca de lo que [los Puntajes] la detección y eliminación. E. g. DONDE TABLE_NAME = ‘Scores’ Y TABLE_SCHEMA = ‘dbo’
    • Generalmente sí, pero no cuando se utiliza el si existe – ya que esta se detiene tan pronto como se devuelve una fila. Pero yo personalmente siempre hago seleccione 1 de todos modos.
    • Buen punto @AndrewJens. I anexa la cláusula where y la instrucción drop.
    • Se NO! SQL Server genera el mismo plan de ejecución. SQL Server no en realidad ejecutar SELECT declaración para, a continuación, ejecutar EXISTS

  3. 59

    He visto muchas que no funcionan.
    cuando una tabla temporal que se crea que se deben eliminar de la base de datos 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"
    • Gracias, el cambio de dbo a tempdb hecho este trabajo. También me gustaría sugerir la adición de la 'u' como se mencionó en la aceptó responder a los comentarios. Por lo tanto, el pleno de la declaración de SI tendría este aspecto: IF OBJECT_ID('tempdb..#temp', 'U')
    • ¿cuál es el punto de la adición de la ‘u’?
    • ‘U’ = Tabla (definido por el usuario)
    • He utilizado tempdb..#tempTABLEname. No #tempDATABASEname.
  4. 26

    Espero que esta ayuda:

    begin try drop table #tempTable end try
    begin catch end catch
    • Mucho mejor, más cortas y más fáciles de recordar que la mayor puntuación de las respuestas de arriba, que trabaja para sql server 2005
  5. 25

    O:

    if exists (select * from sys.objects where name = 'Scores' and type = 'u')
        drop table Scores
    • Usted puede utilizar sys.tablas desde 2005 para simplificar este: if exists (select * from sys.tables where name = 'Scores') drop table Scores
  6. 20

    Escribí un poco UDF que devuelve 1 si el 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 tabla User si es que existe, la llaman así:

    IF [dbo].[Table_exists]('User') = 1 Drop table [User]
    • Acabo de escribir esto para mis propósitos, donde sólo había un esquema, por lo que nunca ha sido un problema para mí. Si uno quiere comprobar que existe una tabla sólo en un esquema específico, esto no iba a funcionar. En cuanto al tamaño de la TABLE_NAME columna, que yo no sabía. Gracias por la sugerencia!
  7. 20

    En SQL Server 2016 (13.x) y por encima de

    DROP TABLE IF EXISTS dbo.Scores

    En versiones anteriores

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

    U es su table type

    • Se debe mencionar brevemente que la primera instrucción sólo funciona en SQL Server 2016 (13.x) y por encima.
  8. 9

    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 type de su table.

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

    Yo uso:

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

    Una mejor visual y de manera fácil, si usted está utilizando Visual Studio, sólo tienes que abrir desde la barra de menú,

    Ver -> el Explorador de Objetos de SQL Server

    se debe abrir como se muestra aquí

    Cómo quitar una tabla, si es que existe en SQL Server?

    Seleccione y Haga Clic en la Tabla que desee eliminar y, a continuación, eliminar. Esta pantalla se debe mostrar. Haga clic en Actualizar la Base de datos para confirmar.

    Cómo quitar una tabla, si es que existe en SQL Server?

    Este método es muy seguro como se les da la información y advertirá de las relaciones de la tabla deleted con otras tablas.

    • Esta pregunta está relacionada con la SQL, no relacionados con Visual Studio. Por lo tanto, esta respuesta es irrelevante para esta pregunta.
  12. -6

    Hacer como esta, es la manera más fácil.

    qry será su propia consulta, lo que usted desee en la lista de selección.

    set @qry = ' select * into TempData from (' + @qry + ')Tmp  '
    
    exec (@qry)
    
    select * from TempData 
    
    drop table TempData
    • Se trata sólo de mí, o esto se parece a la inyección propenso? Por favor comente.
    • Asimismo, no tiene nada que ver con la pregunta

Dejar respuesta

Please enter your comment!
Please enter your name here