[Gelöst] Primärschlüssel auf alle Tabellen

15. März 2018 16:05

Hallo zusammen.

Ich möchte eine Übersicht aus dem Navision erstellen, wobei ich zu allen Tabellen den Primärschlüssel ausgebe?
Wie komme ich auf den Primärschlüssel zu jeder Tabelle im NAV zugreifen?


Beste Grüße
Christian
Zuletzt geändert von navCH am 19. März 2018 16:05, insgesamt 1-mal geändert.

Re: Primärschlüssel auf alle Tabellen

15. März 2018 16:48

Hallo,

das geht über SQL sehr einfach:

SELECT i.name AS IndexName, OBJECT_NAME(ic.OBJECT_ID) AS TableName,
COL_NAME(ic.OBJECT_ID,ic.column_id) AS ColumnName
FROM sys.indexes AS i
INNER JOIN sys.index_columns AS ic
ON i.OBJECT_ID = ic.OBJECT_ID
AND i.index_id = ic.index_id
WHERE i.is_primary_key = 1

Lg

Re: Primärschlüssel auf alle Tabellen

15. März 2018 16:58

Erstelle dir einfach eine Page, welche auf der Tabelle 2000000063 (Key) basiert.
Dort findest du alle in NAV angelegten Schlüssel.
Die Schlüssel mit der Nr. 1 sind Primärschlüssel, alle anderen sind Sekundärschlüssel.

Re: Primärschlüssel auf alle Tabellen

16. März 2018 11:26

Hallo Timo.
Timo Lässer hat geschrieben:Die Schlüssel mit der Nr. 1 sind Primärschlüssel, alle anderen sind Sekundärschlüssel.


Habe mir mit einer Page alle Keys aus Tabelle Key geholt und nach Nr. = 1 gefiltert,
aber Ich habe jetzt 24 Primary Keys zu viel, als es Tabellen im Objekt-Designer gibt?

Wie kann ich die Primärschlüssel, jeder Tabellen ID, oder Tabellen Name zuordnen im Navision?


Beste Grüße,
Christian

Re: Primärschlüssel auf alle Tabellen

16. März 2018 11:35

Hallo NAVvienna!

Ich habe deine SQL Query ausgeführt.
Hierbei werden IndexName, TableName und ColumnName ausgegeben.
Sind ganz schön viel Einträge, inklusive IndexName?

Bekomme auch einen Fehler: An error occurred while executing batch. Error message is: Exception of type 'System.OutOfMemoryException' was thrown.

Da muss ich wohl die Tabellen eingrenzen? :?:
Bin da auf 1.339.323 Zeilen gekommen, bevor SQL abgebrochen hat.


Beste Grüße
Christian

Re: Primärschlüssel auf alle Tabellen

16. März 2018 13:57

navCH hat geschrieben:Habe mir mit einer Page alle Keys aus Tabelle Key geholt und nach Nr. = 1 gefiltert,
aber Ich habe jetzt 24 Primary Keys zu viel, als es Tabellen im Objekt-Designer gibt?

Ich vermute, du hast nur die Anzahl Tabellen, die du im Object Designer sehen kannst, gezählt.
Es gibt auch virtuelle Tabellen (z. B. File, Date, Printer, Integer, ...), welche du im Object Designer nicht sehen kannst. Diese haben logischerweise auch einen Primary Key.

Re: Primärschlüssel auf alle Tabellen

19. März 2018 10:35

Hallo Timo.

Es gibt auch virtuelle Tabellen (z. B. File, Date, Printer, Integer, ...), welche du im Object Designer nicht sehen kannst.

Wie kann ich die virtuellen Tabellen mir sichtbar machen, welche ich tatsächlich in meiner Version/Anpassung habe?
Gibt es eine Tabelle wo alle Tabellennamen drin stehen?
Und gibt es einen Weg, die vorhandenen Primärschlüssel aus Tabelle Key, der richtigen Tabelle zuzuordnen?

Ich könne eine SQL Joins clause verwenden, wenn es eine Tabelle gebe, wo die Tabellen alle drin stehen. :roll:

Beste Grüße,
Christian

Re: Primärschlüssel auf alle Tabellen

19. März 2018 11:06

navCH hat geschrieben:Wie kann ich die virtuellen Tabellen mir sichtbar machen

Per C/AL-Code: In der Tabelle Object auf "Object Type"::Table (nicht ::TableData) filtern.
Zur Ansicht: Erstelle eine Page mit SourceTable "Object", gefilter auf "Object Type"::Table.

navCH hat geschrieben:Und gibt es einen Weg, die vorhandenen Primärschlüssel aus Tabelle Key, der richtigen Tabelle zuzuordnen?

In der Tabelle Key gibt es das Feld "Table No.".

Re: Primärschlüssel auf alle Tabellen

19. März 2018 14:15

Hallo Timo.
In der Tabelle Key gibt es das Feld "Table No.".

Sorry ich hatte die Felder übersehen. Danke, das vereinfacht es natürlich!
:-D

Beste Grüße
Christian