monta kertaa törmäämme skenaarioon, jossa meidän on suoritettava jokin koodi sen perusteella, onko taulukko olemassa vai ei. On olemassa erilaisia tapoja tunnistaa taulukon olemassaolon Sql Server, tässä artikkelissa luetellaan eri lähestymistapoja, joita käytetään yleisesti ja sen etuja ja haittoja. Käytän mieluummin OBJECT_ID () – toimintoa, koska se on helppo muistaa. Kerro minulle, mitä lähestymistapaa käytät ja miksi sama.
näiden eri lähestymistapojen demoksi luodaanpa esimerkkitietokanta, jossa on taulukko alla olevalla skriptillä:
CREATE DATABASE SqlHintsDemoDBGOUSE SqlHintsDemoDBGOCREATE TABLE dbo.Customers (CustId INT, Name NVARCHAR(50))
Miten tarkistaa, onko Temp-taulukko olemassa Sql Server-palvelussa?
lähestymistapa 1: käyttäen INFORMATION_SCHEMAA.Taulukot view
voimme kirjoittaa kyselyn kuten alla tarkistaa, onko nykyisessä tietokannassa Asiakastaulukko.
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'Customers')BEGIN PRINT 'Table Exists'END
tulos:
yllä oleva kysely tarkistaa Asiakastaulukon olemassaolon kaikissa nykyisen tietokannan skeemoissa. Sen sijaan, jos haluat tarkistaa taulukon olemassaolon tietyssä skeemassa ja määrätyssä tietokannassa, voimme kirjoittaa yllä olevan kyselyn alla:
IF EXISTS (SELECT * FROM SqlHintsDemoDB.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = N'dbo' AND TABLE_NAME = N'Customers')BEGIN PRINT 'Table Exists'END
tulos:
tämän lähestymistavan plussat: INFORMATION_SCHEMA-näkymät ovat kannettavia eri RDBMS-järjestelmissä, joten eri RDBMS-järjestelmiin siirtyminen ei vaadi muutoksia.
Miten tarkistaa, onko SQL Server
Approach 2: Using OBJECT_ID() function
we can use OBJECT_ID() function like below to check if a Customers Table in the current database.
IF OBJECT_ID(N'dbo.Customers', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'END
tulos:
Specifying the Database Name and Schema Name parts for the Table Name is optional. Mutta tietokannan nimen ja skeeman nimen määrittäminen tarjoaa mahdollisuuden tarkistaa taulukon olemassaolo määritetyssä tietokannassa ja tietyssä skeemassa sen sijaan, että se tarkistettaisiin nykyisessä tietokannassa kaikissa skeemoissa. Alla kysely osoittaa, että vaikka nykyinen tietokanta on MASTER database, voimme tarkistaa olemassaolo asiakkaiden taulukon DBO skeema sqlhintsdemodb tietokantaan.
USE MASTERGOIF OBJECT_ID(N'SqlHintsDemoDB.dbo.Customers', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'END
tulos:
plussat: helppo muistaa. Yksi merkittävä seikka mainita OBJECT_ID () funktio on: se tarjoaa mahdollisuuden tarkistaa olemassa väliaikaisen taulukon, joka on luotu nykyisen yhteyden yhteydessä. Kaikki muut lähestymistavat tarkistavat väliaikaisen taulukon olemassaolon kaikissa yhteyksissä kontekstin sijaan vain nykyisen yhteyskontekstin. Alla oleva kysely näyttää kuinka tarkistaa väliaikaisen taulukon olemassaolo OBJECT_ID () – funktiolla:
CREATE TABLE #TempTable(ID INT)GOIF OBJECT_ID(N'TempDB.dbo.#TempTable', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'ENDGO
tulos:
Miten tarkistaa, onko SQL Server-tietokannassa tietokantaa
Approach 3: Using sys.Objektien Luettelonäkymä
Voimme käyttää Sys: ää.Objektiluettelon avulla voit tarkistaa taulukon olemassaolon alla esitetyllä tavalla:
IF EXISTS(SELECT 1 FROM sys.Objects WHERE Object_id = OBJECT_ID(N'dbo.Customers') AND Type = N'U')BEGIN PRINT 'Table Exists'END
tulos
Miten tarkistaa, onko tietue olemassa taulukossa
lähestymistapa 4: käyttämällä sys: ää.Taulukoiden Luettelonäkymä
Voimme käyttää Sys: ää.Taulukoiden luettelonäkymä taulukon olemassaolon tarkistamiseksi alla olevalla tavalla:
IF EXISTS(SELECT 1 FROM sys.Tables WHERE Name = N'Customers' AND Type = N'U')BEGIN PRINT 'Table Exists'END
tulos
Sys.Taulukoiden luettelonäkymä perii rivit Sys: stä.Objektien luettelonäkymä, Sys.objektien luettelonäkymää kutsutaan perusnäkymäksi missä SYS.Taulukoita kutsutaan johdetuiksi näkymiksi. Sys.Pöydät palauttavat rivit vain taulukon objekteille, kun taas Sys.Object view sen lisäksi, että se palauttaa taulukon objektien rivit, se palauttaa objektien rivit, kuten: tallennettu menettely, näkymät jne.
miten tarkistaa, onko SQL Server
lähestymistapa 5: Vältä sys: n käyttöä.sysobjects System table
meidän tulisi välttää SYS: n käyttöä.Sysobjects Järjestelmätaulukko suoraan, suora pääsy siihen vanhentuu joissakin tulevissa SQL Server-versioissa. Kuten kohti Microsoft Bol linkki, Microsoft ehdottaa käyttää luettelo näkymät sys.objects/sys.pöydät sys: n sijaan.sysobjects järjestelmätaulukko suoraan.
IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'Customers' AND xtype = N'U')BEGIN PRINT 'Table Exists'END
tulos:
:
How to check if a Database exist
How to check if a Stored Procedure exist in Sql Server
How to check if a View exist
How to check if Temp table exist
How to check if a record exist in table