muitas vezes nos deparamos com um cenário onde precisamos executar algum código baseado em se uma tabela existe ou não. Existem diferentes maneiras de identificar a existência da tabela no servidor Sql, neste artigo irá listar as diferentes abordagens que são comumente usadas e são prós e contras. Eu prefiro usar a função OBJECT_ID () como é fácil de lembrar. Diga-me qual é a sua abordagem e a razão para o mesmo.
demo estas diferentes abordagens vamos criar um exemplo de banco de dados com uma tabela com o seguinte script:
CREATE DATABASE SqlHintsDemoDBGOUSE SqlHintsDemoDBGOCREATE TABLE dbo.Customers (CustId INT, Name NVARCHAR(50))
Como verificar se a tabela temporária existe no Sql Server?
Approach 1: Using INFORMATION_SCHEMA.Tabelas ver
podemos escrever uma consulta como abaixo para verificar se uma tabela de Clientes existe na base de dados atual.
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'Customers')BEGIN PRINT 'Table Exists'END
resultado:
the above query checks the existence of the Customers table across all the schemas in the current database. Em vez de isso, se você deseja verificar a existência da Tabela em um Esquema especificado e o Banco de dados Especificado, em seguida, podemos escrever a consulta acima como abaixo:
IF EXISTS (SELECT * FROM SqlHintsDemoDB.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = N'dbo' AND TABLE_NAME = N'Customers')BEGIN PRINT 'Table Exists'END
RESULTADO:
prós desta abordagem: Information_schema vistas são portáteis através de diferentes sistemas RDBMS, assim portando para diferentes RDBMS não requer nenhuma alteração.
Como verificar se existe um procedimento armazenado no servidor SQL
abordagem 2: Usando a função OBJECT_ID ()
podemos usar a função OBJECT_ID() como abaixo para verificar se existe uma tabela de clientes na base de dados actual.
IF OBJECT_ID(N'dbo.Customers', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'END
resultado:
Specifying the Database Name and Schema Name parts for the Table Name is optional. Mas especificar o nome da Base de dados e o nome do esquema fornece uma opção para verificar a existência da tabela na base de dados especificada e dentro de um esquema especificado, em vez de verificar na base de dados atual através de todos os esquemas. A consulta abaixo mostra que mesmo que o banco de dados atual seja MASTER database, podemos verificar a existência da tabela de clientes no esquema dbo no banco de dados SqlHintsDemoDB.
USE MASTERGOIF OBJECT_ID(N'SqlHintsDemoDB.dbo.Customers', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'END
RESULTADO:
Prós: Fácil de lembrar. Um outro ponto notável a mencionar sobre a função OBJECT_ID() é: ela fornece uma opção para verificar a existência da tabela temporária que é criada no contexto de conexão atual. Todas as outras abordagens verificam a existência da tabela temporária criada em todo o contexto de conexões em vez de apenas o contexto de conexão atual. Abaixo consulta mostra como verificar a existência de uma Tabela Temporária usando OBJECT_ID() função:
CREATE TABLE #TempTable(ID INT)GOIF OBJECT_ID(N'TempDB.dbo.#TempTable', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'ENDGO
RESULTADO:
Como verificar se uma base de Dados existe no Sql Server
Abordagem 3: Usando o sistema.Objects Catalog View
We can use the Sys.Objects catalog view to check the existence of the Table as shown below:
RESULT
How to check if a record exists in a table
Approach 4: Using sys.Tables Catalog View
We can use the Sys.Tables catalog view to check the existence of the Table as shown below:
IF EXISTS(SELECT 1 FROM sys.Tables WHERE Name = N'Customers' AND Type = N'U')BEGIN PRINT 'Table Exists'END
RESULT
Sys.A janela de catálogo de tabelas herda as linhas do sistema.Vista do catálogo de objectos, Sys.objects catalog view é referida como base view where as sys.As tabelas são referidas como vista derivada. Sistema.As tabelas Irão devolver as linhas apenas para os objetos de tabela enquanto Sys.Vista do objecto para além de devolver as linhas dos objectos da tabela, devolve as linhas dos objectos como: procedimento armazenado, vistas, etc.
Como verificar se existe uma vista no servidor Sql
abordagem 5: evitar o uso de sistemas.sysobjects System table
devemos evitar o uso de sys.sysobjects System Table directly, direct access to it will be depreciated in some future versions of the Sql Server. De acordo com o Microsoft BOL link, a Microsoft está sugerindo usar o sistema de vistas de catálogo.objects/sys.tabelas em vez de sys.sysobjects system table directly.
IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'Customers' AND xtype = N'U')BEGIN PRINT 'Table Exists'END
resultado:
:
How to check if a Database exists
How to check if a Stored Procedure exists in Sql Server
How to check if a View exists
How to check if Temp table exists
How to check if a record exists in table