SqlHints.com

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:
Check Table existence Using INFORMATION_SCHEMA view

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:
Verifique a Tabela de Existência Usando INFORMATION_SCHEMA.Quadros ver1

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:
Check Table Resistance Using OBJECT_ID() Function

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:
Verifique a Tabela de Existência Usando OBJECT_ID() Function1

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:
Verifique a Tabela Temporária Existência Utilizando OBJECT_ID() Function1

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
Check Table existence Using Sys.Objects view

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
Check Table existence Using Sys.Tables Catalog view

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:
Check Table Resistance Using Sys.sysobjects System Table

:
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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *