it-swarm.com.de

Überprüfen Sie, ob die Tabelle vorhanden ist, und erstellen Sie sie in SQL Server 2008, falls sie nicht vorhanden ist

Ich schreibe eine gespeicherte Prozedur in SQL Server 2008. Ich muss überprüfen, ob eine Tabelle in der Datenbank vorhanden ist. Wenn nicht, muss ich es erstellen.

Wie mache ich das?

116
Prady

Etwas wie das

IF  NOT EXISTS (SELECT * FROM sys.objects 
WHERE object_id = OBJECT_ID(N'[dbo].[YourTable]') AND type in (N'U'))

BEGIN
CREATE TABLE [dbo].[YourTable](
    ....
    ....
    ....
) 

END
137
SQLMenace

Nur als Kontrast verwende ich gerne die Funktion object_id wie unten gezeigt. Es ist ein bisschen einfacher zu lesen und Sie müssen sich keine Gedanken über sys.objects vs. sysobjects vs. sys.all_objects vs. sys.tables machen. Grundform:

IF object_id('MyTable') is not null
    PRINT 'Present!'
ELSE
    PRINT 'Not accounted for'

Natürlich wird dies als "Vorhanden" angezeigt, wenn ein beliebiges Objekt mit diesem Namen vorhanden ist. Wenn Sie nur Tabellen überprüfen möchten, benötigen Sie:

IF object_id('MyTable', 'U') is not null
    PRINT 'Present!'
ELSE
    PRINT 'Not accounted for'

Es funktioniert auch für temporäre Tabellen:

IF object_id('tempdb.dbo.#MyTable') is not null
    PRINT 'Present!'
ELSE
    PRINT 'Not accounted for'
144
Philip Kelley

Erstellen wir mit dem folgenden Skript eine Beispieldatenbank mit einer Tabelle:

CREATE DATABASE Test
GO
USE Test
GO
CREATE TABLE dbo.tblTest (Id INT, Name NVARCHAR(50))

Ansatz 1: Verwenden der Ansicht INFORMATION_SCHEMA.TABLES

Wir können eine Abfrage wie unten schreiben, um zu überprüfen, ob in der aktuellen Datenbank eine tblTest-Tabelle vorhanden ist.

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

Die obige Abfrage überprüft das Vorhandensein der Tabelle tblTest in allen Schemas in der aktuellen Datenbank. Wenn Sie stattdessen die Existenz der Tabelle in einem angegebenen Schema und der angegebenen Datenbank überprüfen möchten, können Sie die obige Abfrage wie folgt schreiben:

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

Vorteile dieses Ansatzes: INFORMATION_SCHEMA-Ansichten können auf verschiedene RDBMS-Systeme portiert werden, sodass für die Portierung auf verschiedene RDBMS keine Änderungen erforderlich sind.

Ansatz 2: Verwendung der OBJECT_ID () - Funktion

Wir können die Funktion OBJECT_ID() wie folgt verwenden, um zu überprüfen, ob in der aktuellen Datenbank eine tblTest-Tabelle vorhanden ist.

IF OBJECT_ID(N'dbo.tblTest', N'U') IS NOT NULL
BEGIN
  PRINT 'Table Exists'
END

Die Angabe des Datenbanknamens und des Schemanamens für den Tabellennamen ist optional. Die Angabe von Datenbankname und Schemaname bietet jedoch die Möglichkeit, das Vorhandensein der Tabelle in der angegebenen Datenbank und innerhalb eines angegebenen Schemas zu überprüfen, anstatt die aktuelle Datenbank in allen Schemas einzuchecken. Die folgende Abfrage zeigt, dass die Existenz der Tabelle tblTest im Schema dbo in der Datenbank Test überprüft werden kann, obwohl es sich bei der aktuellen Datenbank um die Datenbank MASTER handelt.

USE MASTER
GO
IF OBJECT_ID(N'Test.dbo.tblTest', N'U') IS NOT NULL
BEGIN
  PRINT 'Table Exists'
END

Vorteile: Leicht zu merken. Ein weiterer bemerkenswerter Punkt, der in Bezug auf die Funktion OBJECT_ID() erwähnt werden muss, ist: Sie bietet die Möglichkeit, das Vorhandensein der temporären Tabelle zu überprüfen, die im aktuellen Verbindungskontext erstellt wird. Alle anderen Ansätze überprüfen, ob die temporäre Tabelle im gesamten Verbindungskontext und nicht nur im aktuellen Verbindungskontext vorhanden ist. Die folgende Abfrage zeigt, wie das Vorhandensein einer temporären Tabelle mit der Funktion OBJECT_ID() überprüft wird:

CREATE TABLE #TempTable(ID INT)
GO
IF OBJECT_ID(N'TempDB.dbo.#TempTable', N'U') IS NOT NULL
BEGIN
  PRINT 'Table Exists'
END
GO

Ansatz 3: Verwenden der sys.Objects-Katalogansicht

Wir können die Katalogansicht Sys.Objects Verwenden, um die Existenz der Tabelle wie folgt zu überprüfen:

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

Ansatz 4: Verwenden der sys.Tables-Katalogansicht

Wir können die Katalogansicht Sys.Tables Verwenden, um die Existenz der Tabelle wie folgt zu überprüfen:

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

Die Katalogansicht Sys.Tables Erbt die Zeilen von der Katalogansicht Sys.Objects. Die Katalogansicht Sys.objects Wird als Basisansicht bezeichnet, während die Ansicht sys.Tables Als abgeleitete Ansicht bezeichnet wird . Sys.Tables Gibt die Zeilen nur für die Tabellenobjekte zurück, wohingegen die Sys.Object - Ansicht abgesehen von der Rückgabe der Zeilen für Tabellenobjekte Zeilen für die Objekte wie gespeicherte Prozeduren, Ansichten usw. zurückgibt.

Ansatz 5: Vermeiden Sie die Verwendung der sys.sysobjects-Systemtabelle

Wir sollten es vermeiden, die sys.sysobjects - Systemtabelle direkt zu verwenden. In einigen zukünftigen Versionen von SQL Server wird der direkte Zugriff darauf veraltet sein. Gemäß dem Link [Microsoft BOL] [1] schlägt Microsoft vor, die Systemtabelle sys.objects/sys.tables Anstelle der Systemtabelle sys.sysobjects Direkt zu verwenden.

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

Referenz: http://sqlhints.com/2014/04/13/how-to-check-if-a-table-exists-in-sql-server/

12

BEARBEITET

Sie können in sys.tables nachsehen, um die Existenz der gewünschten Tabelle zu überprüfen:

IF  NOT EXISTS (SELECT * FROM sys.tables
WHERE name = N'YourTable' AND type = 'U')

BEGIN
CREATE TABLE [SchemaName].[YourTable](
    ....
    ....
    ....
) 

END
11
veljasije
IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE  TABLE_NAME = 'd020915'))
BEGIN
  declare @result int
  set @result=1
  select @result as result
END
3
Vinod kumar
Declare @Username varchar(20)
Set @Username = 'Mike'

if not exists 
(Select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'tblEmp')

Begin
    Create table tblEmp (ID int primary key, Name varchar(50))
    Print (@Username + ' Table created successfully')
End

Else

Begin
    Print (@Username + ' : this Table Already exists in the database')
End
0
Aamir Shaikh

Versuchen Sie die folgende Anweisung, um zu überprüfen, ob eine Tabelle in der Datenbank vorhanden ist:

If not exists (select name from sysobjects where name = 'tablename')

Sie können die Tabelle im if-Block erstellen.

0
Only You