Pregunta

¿Hay alguna forma portátil de determinar si una tabla de base de datos ya existe o no?

¿Fue útil?

Solución

Portátil? No lo creo.

Tal vez lo más cercano que puede obtener es:

select * from <table>

Y esto devolvería un error si la tabla no existe.

Otros consejos

Esto es lo más portátil posible, lamentablemente:

select
    count(*)
from
    information_schema.tables
where
    table_name = 'tablename'
    and table_schema = 'dbo'

Esto definitivamente funciona en SQL Server, MySQL y Postgres. Sin embargo, no tanto en Oracle. Tendría que acceder al diccionario de datos de Oracle para eso. Sin embargo, hay un proyecto de código abierto que crea information_schema en Oracle a partir del Diccionario de datos. Puede intentarlo si necesita portabilidad absoluta.

El esquema P.S. no tiene que ser dbo, pero es el más común.

Yo diría

select 'x' from <table_name> where 0=1;

El inconveniente es que si obtiene un error, no sabe con certeza cuál fue la verdadera causa. Puede faltar la tabla o p. Un error de conexión. Puede analizar el mensaje de error, pero definitivamente no sería portátil.

Las vistas INFORMATION_SCHEMA son estándar ANSI, por lo que deberían ser su opción más portátil. No olvide agregar el esquema y el tipo de tabla a su cláusula where ...

if exists(select  *
          from    information_schema.tables
          where   table_schema = 'dbo'
                  and table_name = 'MyTable'
                  and table_type = 'basetable')
begin
     -- your code here
end

Aquí hay algo que es razonablemente portátil:

  

seleccione ahora () del TABLA límite 1;

No se basa en el conocimiento de ninguna columna en particular.

No incurre en los gastos generales que el recuento (*) a veces tiene.

No importa si la tabla está vacía o no.

Falla si la tabla no existe.

Como cada DBMS tiene su propia metabase, creo que la mayoría " portable " La forma de hacerlo es usando la aplicación que llama. Algo como

try
    execute("select top 1 * from table")
    return (true)
catch
    return false

Intenta consultar la tabla. Si la consulta falla, obtiene un error, no existe.

Probablemente sea lo más portátil posible. La carga de producir el resultado depende del código que consulta la tabla / base de datos.

select top 1 *
from MyTable

Mantenga la consulta lo más simple posible para evitar otros posibles errores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top