SQL-Skript

In Dynamics NAV werden den Objekten eine oder mehrere Versionsnummern hinterlegt.

Um einen schnellen Überblick über alle installierten Branchen- und Speziallösungen zu erhalten, reicht aber ein Blick auf diese Versionsnummern nicht aus, da wir hier von tausenden Einträgen reden. Abhilfe schafft aber das folgende kleine SQL-Skript.

DECLARE @dbname varchar(20);
SET @dbname = 'INSERT_DBNAME';
DECLARE @stmt varchar(612);
SET @stmt =
'WITH sortedList AS
(
  SELECT
    SUBSTRING(vList.Item,0,PATINDEX(''%[0-9]%.%'',vList.Item)) AS Produkt,
    SUBSTRING(vList.Item,PATINDEX(''%[0-9]%.%'',vList.Item),LEN(vList.Item)) AS allVersions
    FROM
    (
      SELECT Item
      FROM DelimitedSplit8K(
        STUFF(
            (
            SELECT DISTINCT '','' + OBJ.[Version List] AS [text()]
            FROM [' + @dbname + '].[dbo].[Object] OBJ
            FOR XML PATH('''')
            )
          ,1,1,'''')
        ,'','')
      WHERE Item != ''''
    ) AS vList
)
SELECT sortedList.Produkt,MAX(sortedList.allVersions) AS Version
  FROM sortedList
  WHERE Produkt != ''''
  GROUP BY sortedList.Produkt';
EXEC(@stmt);

Die im SQL-Skript genutzte Funktion „DelimitedSplit8K“ basiert auf „Tally-Tables“ und ist die per­formanteste der allgemein bekannten SQL-Splitter-Methoden. Die Funktion kann hier her­unter­ge­laden werden und muss – sinn­vollerweise in der Master-DB – zuvor erstellt werden.

Mit dieser SQL-Abfrage wird zunächst eine kommagetrennte Auflistung aller Versionseinträge erstellt. Die durch Komma separierten Elemente werden durch die Funktion „DelimitedSplit8K“ voneinander getrennt und in eine temporäre Tabelle gespeist. In dieser Tabelle befinden sich dann alle einzelnen Produktversionen der gesamten Tabelle „Object“. Für unsere Zwecke sind wir allerdings nur an den aktuellsten Versionen eines Produkts interessiert und geben letztendlich nur diese aus. Zusätzlich wird die Produktbezeichnung von der Versionsnummer getrennt.

Wird das SQL-Skript ausgeführt erscheint eine Liste mit allen in der Datenbank installierten Lösungen.

Es ist zu erwähnen, dass die Ausgabe nicht völlig fehlerfrei geschieht. Aufgrund der unglücklichen Namens­ge­bung des Produktes „NAVW1“ mit der darauffolgenden Versionsnummer und fehlender Möglichkeiten dies zuzüglich auszufiltern, ist zu beachten, dass es in diesem Fall zu einer zusätzlichen, vorangestellten „1“ in der Versionsnummer kommt.

In der zweiten Zeile des SQL-Skripts muss in der Variable noch der Datenbankname der zu prüfenden Datenbank eingetragen werden. Wir haben diese Stelle mit INSERT_DBNAME gekennzeichnet.

Schlagwörter

  • Branchenlösungen
  • Dynamics NAV
  • Speziallösungen
  • Tutorial