sql >> Base de Datos >  >> RDS >> Sqlserver

2 formas de crear una tabla si no existe en SQL Server

T-SQL no incluye el IF NOT EXISTS cláusula con su CREATE TABLE declaración, como lo hacen otros DBMS.

Por lo tanto, si queremos verificar la existencia de la tabla antes de crearla en SQL Server, debemos usar otros métodos.

Opción 1:comprobar el ID del objeto

En SQL Server, podemos usar el OBJECT_ID() función para verificar la existencia de la tabla antes de intentar crearla:

IF OBJECT_ID(N'dbo.t1', N'U') IS NULL
CREATE TABLE dbo.t1 (
    c1 int,
    c2 varchar(10)
    );
GO

El ejemplo anterior verifica el ID del objeto para un dbo.t1 mesa.

El segundo argumento de OBJECT_ID() especifica el tipo de objeto que estamos buscando. En este caso usamos U , que es para "tabla definida por el usuario".

El OBJECT_ID() devuelve el número de identificación del objeto de la base de datos de un objeto del ámbito del esquema. Si el objeto no existe, o si no tiene acceso a él, la función devuelve NULL. Por lo tanto, podemos buscar un valor NULL y solo crear la tabla si esta función devuelve NULL.

Podemos usar el OBJECT_ID() función para comprobar el ID de objeto de la tabla una vez que se ha creado:

SELECT OBJECT_ID(N'dbo.t1', N'U');

Resultado de ejemplo:

354100302

Si quisiéramos un poco más de información, podríamos hacer algo como esto:

sp_tables 't1';

Resultado:

+-------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER   | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|-------------------+---------------+--------------+--------------+-----------|
| KrankyKranes      | dbo           | t1           | TABLE        | NULL      |
+-------------------+---------------+--------------+--------------+-----------+

Aquí, KrankyKranes es la base de datos en la que creé la tabla.

Hay muchas otras formas de ver las tablas existentes. Consulte 6 formas de comprobar si existe una tabla en SQL Server para ver ejemplos.

Opción 2:consulta sys.tables

Otra forma de verificar si una tabla ya existe es consultar el sys.tables vista del catálogo del sistema.

Ejemplo:

IF NOT EXISTS (
    SELECT * FROM sys.tables t 
    JOIN sys.schemas s ON (t.schema_id = s.schema_id) 
    WHERE s.name = 'dbo' AND t.name = 't1') 	
    CREATE TABLE dbo.t1 (
        c1 int,
        c2 varchar(10)
        );

Eso hace algo similar al ejemplo anterior; comprueba la existencia de la tabla y la crea solo si no existe.

Independientemente del método utilizado para verificar la existencia de la tabla, el comando se completa con éxito, independientemente de si la tabla existe o no.

Entonces obtenemos el siguiente resultado de ambos métodos:

Commands completed successfully.

Recibo ese mensaje ya sea que la tabla ya exista o no.

Si la tabla ya existe, pero no verificamos la existencia de la tabla, obtenemos un error como este:

Msg 2714, Level 16, State 6, Line 1
There is already an object named 't1' in the database.

Es importante tener en cuenta que, solo porque una tabla con ese nombre ya exista en la base de datos, no significa que tenga la definición correcta. Los métodos anteriores simplemente verifican la tabla por nombre y esquema.