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.