none
Abfrage ob Tabelle, Feld, SP ... existiert RRS feed

  • Frage

  • Hallo,

    ich möchte Patches bauen mit denen ich neue Versionsstände installieren kann.

    Wenn ich dabei Komponenten löschen möchte die nicht existieren gibt's Fehlermeldungen.

    Meine Frage:

    Wie kann ich vorm Löschen fragen ob eine Tabelle, ein Feld, eine Stored Proceduer existiert?

    Danke Michael

     

     

    Montag, 30. Mai 2011 09:12

Antworten

  • Hallo,

    in Ergänzung zu Stefans Antworten kann dabei OBJECT_ID hilfreich sein:

    IF OBJECT_ID(N'dbo.Tabelle', N'U') IS NOT NULL
     DROP TABLE dbo.Tabelle;
    
    
    

    (bei einer Prozedur wäre der zweite Parameter N'P', siehe sys.objects.type

    Für Spalten ginge es entsprechend mit COLUMNPROPERTY:

    IF COLUMNPROPERTY(OBJECT_ID(N'dbo.Tabelle'), 'Spalte', 'ColumnId') IS NULL
      ALTER TABLE dbo.Tabelle ADD Spalte nvarchar(40) NULL; 
    Gruß Elmar

    • Bearbeitet Elmar BoyeEditor Montag, 30. Mai 2011 10:15 COLUMNPROPERTY
    • Als Antwort markiert mimuel Montag, 30. Mai 2011 10:17
    Montag, 30. Mai 2011 10:09
    Beantworter

Alle Antworten

  • hi,

    mit Hilfe diverser Systemsichten - den Catalog Views, z.B.

    USE AdventureWorksLT ;
    GO
    
    SELECT T.name ,
      C.name
    FROM sys.tables T
      INNER JOIN sys.columns C ON T.object_id = C.object_id ;
    

     

    Zum Beispiel als DROP Skripts, bevor du deine neuen Objekte erzeugst, hier SSMS-Standard mit den alten Systensichten:

     

    IF EXISTS ( SELECT *
       FROM dbo.sysobjects
       WHERE id = OBJECT_ID(N'[DF_Address_rowguid]')
         AND type = 'D' ) 
     BEGIN
      ALTER TABLE [SalesLT].[Address] DROP CONSTRAINT [DF_Address_rowguid]
     END
    

     


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Montag, 30. Mai 2011 09:25
    Moderator
  • Hallo,

    in Ergänzung zu Stefans Antworten kann dabei OBJECT_ID hilfreich sein:

    IF OBJECT_ID(N'dbo.Tabelle', N'U') IS NOT NULL
     DROP TABLE dbo.Tabelle;
    
    
    

    (bei einer Prozedur wäre der zweite Parameter N'P', siehe sys.objects.type

    Für Spalten ginge es entsprechend mit COLUMNPROPERTY:

    IF COLUMNPROPERTY(OBJECT_ID(N'dbo.Tabelle'), 'Spalte', 'ColumnId') IS NULL
      ALTER TABLE dbo.Tabelle ADD Spalte nvarchar(40) NULL; 
    Gruß Elmar

    • Bearbeitet Elmar BoyeEditor Montag, 30. Mai 2011 10:15 COLUMNPROPERTY
    • Als Antwort markiert mimuel Montag, 30. Mai 2011 10:17
    Montag, 30. Mai 2011 10:09
    Beantworter
  • Hallo Mimuel

    mimuel wrote:

    Wie kann ich vorm Löschen fragen ob eine Tabelle, ein Feld, eine Stored
    Proceduer existiert?

    Die einfachste Methode ist, das Scripting in SSMS so einzustellen, dass es immer zuerst kontrolliert, ob das Objekt existiert und dann z.B. einen Create Job scripten zu lassen. Dann hast Du das EXISTS Statement ganz oben im Job.

    Gruss
    Henry

    Montag, 30. Mai 2011 11:06