BlogMicrosoftSQLWindows

MSSQL Erweiterte Eigenschaften löschen

Heute habe ich von einer on-premise Datenbank eine .bacpac Datei erzeugt, damit ich die DB in Azure migrieren kann. Der Datenbankserver ist ein SQL 2008 gewesen. Eine BacPac speichert das Datenbankschema und die enthaltenen Daten. Der Hauptzweck einer solchen Datei ist es, eine Datenbank von einem Server zum anderen zu kopieren. Aber auch die Migrierung in die Cloud kann mit diesem Format erledigt werden. Die eigentlichen Daten werden innerhalb der Datei in JSON Format abgespeichert. Vorweg muss ich sagen, dass ich diesen Test nicht mit einer Produktiv DB gemacht habe, sondern mit einer Kopie in meinem lokalen SQLExpress.

 

BacPac erzeugen

Um eine BacPac zu erzeugen muss die Datenbank, exportiert werden .
Den ganzen Wizard gehe ich nicht durch, aber hier kann gewählt werden, ob die Extraktion direkt in Azure geladen werden soll oder lokal abgespeichert wird. Für Azure wird ein Speicherkonto, Schlüssel und der Container benötigt.

Nachdem ich den Wizard durch hatte, startete der Export, der jedoch fehl schlug. Schnell fand ich heraus, dass es wiederkehrende Fehler sind und ich nur 3 eigentliche Fehler hatte.

Einer davon lautete wie folgt:

Error SQL71564: Das Erweiterte Eigenschaft: [dbo].[DB_VIEW].[MS_DiagramPane1]-Element wird nicht unterstützt, wenn es als Teil eines Datenpakets ('.bacpac') verwendet wird.

 

 

 

Was hat dieser Fehler zu bedeuten?

Jede View hat ihre speziellen Eigenschaften, die in Eigenschaften -> Erweiterte Eigenschaften eingesehen werden können. Hier sind auch MS_DiagramPane1 und MS_DiagramPaneCount zu finden. Beide sind zuständig für das MSSQL Diagramm, welches bei der Erstellung der View angezeigt wird. Da ich dieses Diagramm eh nicht verwende, hatte ich auch keine Probleme damit diese Werte zu löschen. Allerdings wollte ich nicht alles per Hand löschen, somit habe ich mir ein kleines Script geschrieben.

USE DB 

GO

DECLARE @Vname varchar(100)
DECLARE @Vtype varchar(10)
DECLARE @Property varchar(20)

DECLARE MY_CURSOR CURSOR
  LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR
select sys.views.name,sys.views.type_desc,sys.extended_properties.name
from sys.extended_properties INNER JOIN sys.views on sys.extended_properties.major_id = sys.views.object_id
where sys.extended_properties.name in ('MS_DiagramPane1','MS_DiagramPaneCount')

OPEN MY_CURSOR
FETCH NEXT FROM MY_CURSOR INTO @Vname, @Vtype, @Property
WHILE @@FETCH_STATUS = 0
BEGIN
  EXEC sp_dropextendedproperty
  @name = @Property
  ,@level0type = 'schema'
  ,@level0name = 'dbo'
  ,@level1type = @Vtype
  ,@level1name = @Vname
  FETCH NEXT FROM MY_CURSOR INTO @Vname,@Vtype, @Property
END
CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR

Das Select holt mir alle Views mit den beiden Attributen MS_DiagramPane1 und MS_DiagramPaneCount. Das daraus resultierende Resultset liefert mir den Viewnamen, den Typ und den Attributnamen. Mit Hilfe des Cursors kann ich jede einzelne Zeile im Resultset bearbeiten. Um Attribute zu löschen benutze ich den befehl sp_dropextendedproperty. Dieser erwartet einige Argumente, die in der Microsoft Knowledgebase nachzulesen sind.

https://docs.microsoft.com/de-de/sql/relational-databases/system-stored-procedures/sp-dropextendedproperty-transact-sql?view=sql-server-2017 

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.