Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

2 maneiras de criar uma tabela se ela não existir no SQL Server


T-SQL não inclui o IF NOT EXISTS cláusula com seu CREATE TABLE instrução, como alguns outros DBMSs fazem.

Portanto, se quisermos verificar a existência da tabela antes de criá-la no SQL Server, precisamos usar outros métodos.

Opção 1:verifique o ID do objeto


No SQL Server, podemos usar o OBJECT_ID() função para verificar a existência da tabela antes de tentarmos criá-la:
IF OBJECT_ID(N'dbo.t1', N'U') IS NULL
CREATE TABLE dbo.t1 (
    c1 int,
    c2 varchar(10)
    );
GO

O exemplo acima verifica o ID do objeto para um dbo.t1 tabela.

O segundo argumento para OBJECT_ID() especifica o tipo de objeto que estamos procurando. Neste caso, usamos U , que é para "tabela definida pelo usuário".

O OBJECT_ID() retorna o número de identificação do objeto de banco de dados de um objeto com escopo de esquema. Se o objeto não existir ou se você não tiver acesso a ele, a função retornará NULL. Portanto, podemos verificar um valor NULL e somente criar a tabela se esta função retornar NULL.

Podemos usar o OBJECT_ID() função para verificar o ID do objeto da tabela depois de criada:
SELECT OBJECT_ID(N'dbo.t1', N'U');

Exemplo de resultado:
354100302

Se quiséssemos um pouco mais de informação, poderíamos fazer algo assim:
sp_tables 't1';

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

Aqui, KrankyKranes é o banco de dados em que criei a tabela.

Há muitas outras maneiras de examinar as tabelas existentes. Consulte 6 maneiras de verificar se existe uma tabela no SQL Server para obter exemplos.

Opção 2:consultar sys.tables


Outra maneira de verificar se uma tabela já existe é consultar o sys.tables visualização do catálogo do sistema.

Exemplo:
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)
        );

Isso faz uma coisa semelhante ao exemplo anterior; ele verifica a existência da tabela e a cria somente se ela não existir.

Independentemente do método usado para verificar a existência da tabela, o comando é concluído com êxito, independentemente de a tabela existir ou não.

Assim, obtemos a seguinte saída de ambos os métodos:
Commands completed successfully.

Recebo essa mensagem se a tabela já existia ou não.

Se a tabela já existe, mas não verificamos a existência da tabela, recebemos um erro como este:
Msg 2714, Level 16, State 6, Line 1
There is already an object named 't1' in the database.

É importante notar que, só porque uma tabela com esse nome já existe no banco de dados, não significa que ela tenha a definição correta. Os métodos acima simplesmente verificam a tabela por nome e esquema.