SqlHints.com

de multe ori întâlnim un scenariu în care trebuie să executăm un cod bazat pe existența sau nu a unui tabel. Există diferite moduri de a identifica existența tabel în Sql Server, în acest articol va lista din diferite abordări care sunt utilizate în mod obișnuit și este argumente pro și contra. Prefer să folosesc funcția OBJECT_ID (), deoarece este ușor de reținut. Spuneți-mi ce abordare utilizați și motivul pentru același lucru.

pentru a demonstra aceste abordări diferite, să creăm o bază de date eșantion cu un tabel după scriptul de mai jos:

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

cum să verificați dacă tabelul Temp există în Sql Server?

abordarea 1: Utilizarea INFORMATION_SCHEMA.Vizualizare tabele

putem scrie o interogare ca mai jos pentru a verifica dacă există un tabel clienți în baza de date curentă.

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

rezultat:
verificați existența tabelului folosind INFORMATION_SCHEMA view

interogarea de mai sus verifică existența tabelului clienți în toate schemele din Baza de date curentă. În loc de aceasta, dacă doriți să verificați existența tabelului într-o schemă specificată și baza de date specificată, atunci putem scrie interogarea de mai sus ca mai jos:

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

rezultat:
verificați existența tabelului folosind INFORMATION_SCHEMA.Tabele view1

avantajele acestei abordări: Vizualizările INFORMATION_SCHEMA sunt portabile în diferite sisteme RDBMS, astfel încât portarea la diferite RDBMS nu necesită nicio modificare.

cum se verifică dacă există o procedură stocată în Sql Server

abordarea 2: Folosind funcția OBJECT_ID ()

putem folosi funcția OBJECT_ID() ca mai jos pentru a verifica dacă există un tabel clienți în baza de date curentă.

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

rezultat:
verificați existența tabelului folosind funcția OBJECT_ID ()

specificarea numelui bazei de date și a pieselor de nume ale schemei pentru numele tabelului este opțională. Dar specificarea numelui bazei de date și a numelui schemei oferă o opțiune pentru a verifica existența tabelului în baza de date specificată și într-o schemă specificată, în loc să verificați baza de date curentă în toate schemele. Interogarea de mai jos arată că, chiar dacă baza de date curentă este baza de date MASTER, putem verifica existența tabelului clienți în schema dbo în baza de date sqlhintsdemodb.

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

rezultat:
verificați existența tabelului folosind OBJECT_ID() Function1

Pro: Ușor de reținut. Un alt punct notabil de menționat despre funcția OBJECT_ID () este: oferă o opțiune pentru a verifica existența tabelului temporar care este creat în contextul actual al conexiunii. Toate celelalte abordări verifică existența tabelului temporar creat în contextul tuturor conexiunilor în loc de doar contextul actual al conexiunii. Interogarea de mai jos arată cum să verificați existența unui tabel temporar folosind funcția OBJECT_ID ():

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

rezultat:
verificați existența unui tabel temporar folosind funcția OBJECT_ID() 1

cum să verificați dacă există o bază de date în Sql Server

abordarea 3: Utilizarea sys.Vizualizarea Catalogului de obiecte

putem folosi sistemul.Vizualizarea Catalogului de obiecte pentru a verifica existența tabelului așa cum se arată mai jos:

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

rezultat
verificați existența tabelului folosind Sys.Vizualizarea obiectelor

cum se verifică dacă există o înregistrare într-un tabel

abordarea 4: Utilizarea sistemului.Vizualizarea Catalogului tabelelor

putem folosi sistemul.Vizualizarea Catalogului tabelelor pentru a verifica existența tabelului așa cum se arată mai jos:

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

rezultat
verificați existența tabelului folosind Sys.Vizualizarea Catalogului tabelelor

Sys.Vizualizarea catalog tabele moștenește rândurile din Sys.Vizualizare catalog obiecte, Sys.vizualizarea Catalogului de obiecte este denumită vizualizare de bază unde este sys.Tabele este menționată ca vizualizare derivate. Sys.Tabelele vor returna rândurile numai pentru obiectele de masă în timp ce Sys.Vizualizare obiect în afară de returnarea rândurilor pentru obiecte de masă, returnează rânduri pentru obiecte precum: procedură stocată, vizualizări etc.

cum se verifică dacă există o vizualizare în Sql Server

abordarea 5: evitați utilizarea sys.tabelul de sistem sysobjects

ar trebui să evităm utilizarea sys.tabelul de sistem sysobjects direct, accesul direct la acesta va fi depreciat în unele versiuni viitoare ale serverului Sql. Ca pe link-ul Microsoft BOL, Microsoft sugerează să utilizeze vizualizările catalogului SYS.obiecte/sys.tabele în loc de sys.tabelul de sistem sysobjects direct.

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

rezultat:
verificați existența tabelului folosind Sys.Sysobjects System Table

:
Cum să verificați dacă există o bază de Date
Cum să verificați dacă există o procedură stocată în Sql Server
Cum să verificați dacă există o vizualizare
Cum să verificați dacă există un tabel Temp
Cum să verificați dacă există o înregistrare în tabel

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *