SqlHints.com

mnohokrát jsme narazili na situaci, kdy potřebujeme provést nějaký kód na základě toho, zda Tabulka existuje, nebo ne. Existují různé způsoby, jak identifikovat existenci tabulky v Sql Serveru, v tomto článku se zobrazí seznam různých přístupů, které se běžně používají, a to je klady a zápory. Dávám přednost použití funkce OBJECT_ID (), protože je snadno zapamatovatelná. Dejte mi vědět, jaký přístup používáte, a důvod pro to samé.

demo tyto rozdílné přístupy, pojďme vytvořit ukázkové databáze s tabulkou níže scénář:

CREATE DATABASE SqlHintsDemoDBGOUSE SqlHintsDemoDBGOCREATE TABLE dbo.Customers (CustId INT, Name NVARCHAR(50))

Jak zkontrolovat, zda dočasná tabulka existuje v Sql Server?

přístup 1: Použití INFORMATION_SCHEMA.Tabulky Zobrazit

můžeme napsat dotaz jako níže a zkontrolovat, zda v aktuální databázi existuje tabulka zákazníků.

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'Customers')BEGIN PRINT 'Table Exists'END

výsledek:
Podívejte se na Tabulky Existence Pomocí INFORMATION_SCHEMA zobrazení

výše uvedený dotaz zkontroluje existenci tabulky Zákazníci napříč všemi schématy v aktuální databázi. Místo toho, pokud chcete zkontrolovat existenci Tabulky ve stanoveném Schématu a Zadané Databáze pak můžeme napsat, že výše uvedený dotaz jako níže:

IF EXISTS (SELECT * FROM SqlHintsDemoDB.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = N'dbo' AND TABLE_NAME = N'Customers')BEGIN PRINT 'Table Exists'END

VÝSLEDEK:
Podívejte se na Tabulky Existence Pomocí INFORMATION_SCHEMA.Tabulky view1

výhody tohoto přístupu: Zobrazení INFORMATION_SCHEMA jsou přenosná napříč různými systémy RDBMS, takže portování na různé RDBMS nevyžaduje žádnou změnu.

Jak zkontrolovat, zda existuje Uložené Procedury v Sql Server,

Přístup 2: Pomocí OBJECT_ID() funkce

můžeme použít OBJECT_ID() funkce jako níže ke kontrole, zda Zákazníci Tabulky existuje v aktuální databázi.

IF OBJECT_ID(N'dbo.Customers', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'END

výsledek:
Podívejte se na Tabulky Existence Pomocí OBJECT_ID() Funkce

Určující Název Databáze a Název Schématu díly pro Tabulku Jméno je volitelné. Zadání názvu databáze a názvu schématu však poskytuje možnost zkontrolovat existenci tabulky v zadané databázi a v zadaném schématu, namísto kontroly v aktuální databázi napříč všemi schématy. Níže uvedený dotaz ukazuje, že i když je aktuální databáze hlavní databází, můžeme zkontrolovat existenci tabulky zákazníků ve schématu dbo v databázi SqlHintsDemoDB.

USE MASTERGOIF OBJECT_ID(N'SqlHintsDemoDB.dbo.Customers', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'END

VÝSLEDEK:
Podívejte se na Tabulky Existence Pomocí OBJECT_ID() Function1

Klady: Snadno zapamatovatelné. Jeden další pozoruhodný bod zmínit o OBJECT_ID () funkce je: poskytuje možnost zkontrolovat existenci dočasné tabulky, která je vytvořena v aktuálním kontextu připojení. Všechny ostatní přístupy kontrolují existenci dočasné tabulky vytvořené ve všech souvislostech připojení namísto pouze aktuálního kontextu připojení. Níže dotaz ukazuje, jak zkontrolovat existenci Dočasné Tabulky pomocí OBJECT_ID() funkce:

CREATE TABLE #TempTable(ID INT)GOIF OBJECT_ID(N'TempDB.dbo.#TempTable', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'ENDGO

VÝSLEDEK:
Podívejte se na Dočasné Tabulky Existence Pomocí OBJECT_ID() Function1

Jak zkontrolovat, zda Databáze existuje v Sql Server,

Přístup 3: Pomocí sys.Zobrazení katalogu objektů

můžeme použít Sys.Objects katalogu zobrazení pro kontrolu existence Tabulky, jak je uvedeno níže:

IF EXISTS(SELECT 1 FROM sys.Objects WHERE Object_id = OBJECT_ID(N'dbo.Customers') AND Type = N'U')BEGIN PRINT 'Table Exists'END

VÝSLEDEK
Podívejte se na Tabulky Existence Pomocí Sys.Zobrazení objektů

jak zkontrolovat, zda existuje záznam v tabulce

přístup 4: Použití sys.Tabulky Katalog View

můžeme použít Sys.Tabulky katalogu zobrazení pro kontrolu existence Tabulky, jak je uvedeno níže:

IF EXISTS(SELECT 1 FROM sys.Tables WHERE Name = N'Customers' AND Type = N'U')BEGIN PRINT 'Table Exists'END

VÝSLEDEK
Podívejte se na Tabulky Existence Pomocí Sys.Tabulka zobrazení katalogu

Sys.Tabulky katalog view dědí řádky ze Sys.Zobrazení katalogu objektů, Sys.zobrazení katalogu objektů je označováno jako základní zobrazení, kde jako sys.Tabulky se označují jako odvozené zobrazení. Sys.Tabulky vrátí řádky pouze pro objekty tabulky, zatímco Sys.Zobrazení objektů kromě vrácení řádků pro objekty tabulky vrací řádky pro objekty jako: uložená procedura, pohledy atd.

jak zkontrolovat, zda v Sql Serveru existuje pohled

Přístup 5: nepoužívejte sys. sysobjects System table

neměli bychom používat sys.systémová tabulka sysobjects přímo, přímý přístup k ní bude v některých budoucích verzích serveru Sql zastaralý. Podle odkazu Microsoft BOL Microsoft navrhuje použít katalogové zobrazení sys.objekty / sys.tabulky místo sys.sysobjects systémová tabulka přímo.

IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'Customers' AND xtype = N'U')BEGIN PRINT 'Table Exists'END

výsledek:
zkontrolujte existenci tabulky pomocí Sys.Systémové Tabulce sysobjects

:
Jak zkontrolovat, zda Databáze existuje,
Jak zkontrolovat, zda existuje Uložené Procedury v Sql Server
Jak zkontrolovat, zda je Zobrazení existuje
Jak zkontrolovat, zda dočasná tabulka existuje,
Jak zkontrolovat, zda existuje záznam v tabulce

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *