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 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 performanteste der allgemein bekannten SQL-Splitter-Methoden. Die Funktion kann hier heruntergeladen werden und muss â sinnvollerweise 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 Namensgebung 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.