SqlHints.com

wiele razy spotykamy się ze scenariuszem, w którym musimy wykonać kod w oparciu o to, czy tabela istnieje, czy nie. Istnieją różne sposoby identyfikacji istnienia tabeli w Sql Server, w tym artykule przedstawimy różne podejścia, które są powszechnie stosowane i są za i przeciw. Wolę używać funkcji OBJECT_ID (), ponieważ jest łatwa do zapamiętania. Daj mi znać, którego podejścia używasz i powód tego samego.

aby pokazać te różne podejścia, stwórzmy przykładową bazę danych z tabelą za pomocą poniższego skryptu:

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

Jak sprawdzić, czy tabela Temp istnieje w SQL Server?

podejście 1: Użycie INFORMATION_SCHEMA.Widok tabel

możemy napisać zapytanie jak poniżej, aby sprawdzić, czy tabela klientów istnieje w bieżącej bazie danych.

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

wynik:
Sprawdź istnienie tabeli używając widoku INFORMATION_SCHEMA

powyższe zapytanie sprawdza istnienie tabeli klientów we wszystkich schematach w bieżącej bazie danych. Zamiast tego, jeśli chcesz sprawdzić istnienie tabeli w podanym schemacie i podanej bazie danych, możemy napisać powyższe zapytanie jak poniżej:

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

wynik:
Sprawdź istnienie tabeli za pomocą INFORMATION_SCHEMA.Tabele view1

zalety tego podejścia: Widoki INFORMATION_SCHEMA są przenośne dla różnych systemów RDBMS, więc przenoszenie do różnych RDBMS nie wymaga żadnych zmian.

Jak sprawdzić, czy procedura składowana istnieje w Sql Server

podejście 2: używając funkcji OBJECT_ID ()

możemy użyć funkcji OBJECT_ID() jak poniżej, aby sprawdzić, czy w bieżącej bazie danych istnieje tabela klientów.

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

wynik:
Sprawdź istnienie tabeli za pomocą funkcji OBJECT_ID ()

podanie nazwy bazy danych i części nazwy schematu dla nazwy tabeli jest opcjonalne. Ale podanie nazwy bazy danych i nazwy schematu daje możliwość sprawdzenia istnienia tabeli w określonej bazie danych i w określonym schemacie, zamiast sprawdzania w bieżącej bazie danych we wszystkich schematach. Poniższe zapytanie pokazuje, że nawet jeśli bieżąca baza danych jest bazą MASTER, możemy sprawdzić istnienie tabeli klientów w schemacie dbo w bazie danych sqlhintsdemodb.

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

wynik:
Sprawdź istnienie tabeli za pomocą funkcji OBJECT_ID() 1

zalety: łatwe do zapamiętania. Inną godną uwagi kwestią na temat funkcji OBJECT_ID () jest: Zapewnia ona możliwość sprawdzenia istnienia tymczasowej tabeli, która jest tworzona w bieżącym kontekście połączenia. Wszystkie inne metody sprawdzają istnienie tymczasowej tabeli utworzonej we wszystkich kontekstach połączeń, a nie tylko w bieżącym kontekście połączenia. Poniższe zapytanie pokazuje, jak sprawdzić istnienie tymczasowej tabeli za pomocą funkcji OBJECT_ID ():

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

wynik:
Sprawdź istnienie tymczasowej tabeli za pomocą funkcji OBJECT_ID() 1

Jak sprawdzić, czy baza danych istnieje w Sql Server

podejście 3: za pomocą sys.Widok katalogu obiektów

możemy użyć Sys.Widok katalogu obiektów w celu sprawdzenia istnienia tabeli, jak pokazano poniżej:

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

RESULT
Sprawdź istnienie tabeli za pomocą Sys.Widok obiektów

Jak sprawdzić, czy rekord istnieje w tabeli

podejście 4: Użycie sys.Widok katalogu tabel

możemy użyć Sys.Widok katalogu tabel w celu sprawdzenia istnienia tabeli, jak pokazano poniżej:

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

RESULT
Sprawdź istnienie tabeli za pomocą Sys.Widok katalogu tabel

Sys.Widok katalogu tabel dziedziczy wiersze z Sys.Widok katalogu obiektów, Sys.widok katalogu obiektów jest określany jako widok bazowy, gdzie jako sys.Tabele są określane jako widok Pochodny. Sys.Tabele zwrócą wiersze tylko dla obiektów Table, natomiast Sys.Widok obiektu oprócz zwracania wierszy dla obiektów tabelkowych, zwraca wiersze dla obiektów takich jak: procedura składowana, widoki itd.

Jak sprawdzić, czy Widok istnieje w Sql Server

podejście 5: Unikaj używania sys.tabela systemowa sysobjects

powinniśmy unikać sys.tablica systemowa sysobjects bezpośrednio, bezpośredni dostęp do niej będzie przestarzały w niektórych przyszłych wersjach Sql serwera. Zgodnie z Microsoft BOL link, Microsoft sugeruje użycie widoku katalogu sys.obiekty / sys.tabele zamiast sys.bezpośrednio w tabeli systemowej sysobjects.

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

wynik:
Sprawdź istnienie tabeli za pomocą Sys.Sysobjects tabela systemowa

:
Jak sprawdzić, czy istnieje baza danych
Jak sprawdzić, czy istnieje procedura składowana w Sql Server
Jak sprawdzić, czy istnieje Widok
Jak sprawdzić, czy istnieje tabela Temp
Jak sprawdzić, czy istnieje rekord w tabeli

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *