Daten mit anderen MSSQL Datenbank austauschen

29. Januar 2009 12:06

Hallo

Wir haben NAV 4.0 SP3 im Einsatz.
Nun habe ich die Anforderung Navisiondaten mit eine anderen Datenbank (Sql-Server 2005 auf einen anderen Server) auszutauschen.
Sprich in Navision wird in einer Form Fertigungsauftragsnummer,Chargennummer usw. eingegeben und diese Daten sollten in die andere DB übergeben werden. Weiters kommen dann Daten auch von der anderen DB zurück und werden in NAV gespeichert. Sprich ich brauche einen bidirektionale Datenaustausch.
Leider habe ich hierzu keine Erfahrungen. Wie könnte ich das lösen?
lg
stony

Re: Daten mit anderen MSSQL Datenbank austauschen

30. Januar 2009 17:58

Hallo Stony,

da gibt es verschiedene Möglichkeiten
- per ADO und NAV-Client
- per Verbindungsserver und Linked Objects

Viele Grüße
MrBurns

Re: Daten mit anderen MSSQL Datenbank austauschen

30. Januar 2009 20:02

Hallo MrBurns,

das mit ADO und NAV-Client ist mir nun schon ein wenig klar, aber was ist Verbindungsserver und Linked Objects.

Bitte um Info

lg
Stony

Re: Daten mit anderen MSSQL Datenbank austauschen

31. Januar 2009 18:16

Hi!
Also, wenn die beiden DB z.B. auf der selben SQL Server Instanz installiert sind dann kann man die Daten auch z.B. via
Code:
INSERT INTO DB1.dbo.Tabelle1 SELECT ... FROM DB2.dbo.Tabelle2
austauschen.
Sind die DB auf verschiedenen Servern, dann kann man z.B. auf Server1 einen "Linked Server" zu Server2 aufbauen (siehe "Books Online"), dann geht's im Prinzip genauso:
Code:
INSERT INTO DB1.dbo.Tabelle1 SELECT ... FROM Server2.DB2.dbo.Tabelle2

Als "Linked Object" bezeichnet man einen SQL "View" der quasi als Tabelle in NAV eingebunden wird und somit in NAV wie jede andere Tabelle benutzt werden kann.

Wenn Daten in komplexer Form ausgetauscht werden müssen, dann könnten u.U. auch die "SQL Server Integration Services" (SSIS) von Nutzen sein.

Re: Daten mit anderen MSSQL Datenbank austauschen

25. Januar 2012 13:50

Hallo,

ich stehe zur Zeit ebenfalls vor der Herausforderung mit Navision andere SQL-Tabellen zu schreiben.
Geht das problemlos, wenn ich die SQL-Views angelegt und in NAV eingebunden habe?

Gruß
Jörg

Re: Daten mit anderen MSSQL Datenbank austauschen

25. Januar 2012 14:03

Über Linked Objects (also über eine View auf den anderen Server) würde ich es nicht realisieren.

Die Frage ist, wie muss der Austausch erfolgen? Wie soll also die Übertragung stattfinden? Beispiel: Benutzer gibt Daten in Navision ein -> im selben Moment wandert eine Kopie dieser Daten in die andere Datenbank.

Ganz wie dein Szenario aussieht kann ich mir unterschiedliche Lösungen vorstellen. Das Stichwort SSIS ist zum Beispiel bereits gefallen. SQL-Trigger könnten auch eine Alternative sein.

EDIT: Geht es hier um andere SQL-Tabellen in der gleichen Datenbank oder anderer Server/Datenbank?

Re: Daten mit anderen MSSQL Datenbank austauschen

25. Januar 2012 14:55

Hallo Sebastian,

im konkreten Fall geht es um andere SQL-Tabellen in der gleichen Datenbank.
Und die Daten, die in die anderen SQL-Tabellen geschrieben werden sollen, werden über periodische Aktivitäten - nicht laufend - ausgeführt.

Gruß
Jörg

Re: Daten mit anderen MSSQL Datenbank austauschen

25. Januar 2012 15:38

Wenn die Daten nicht im selben Moment in der anderen Tabelle benötigt werden könnte man über SSIS bzw. Stored Procedures arbeiten, welche über den SQL-Server Agent periodisch ausgeführt werden und dann neue Daten überträgt und formatiert.

Re: Daten mit anderen MSSQL Datenbank austauschen

25. Januar 2012 16:53

Hallo Sebastian,

da ich beim Befüllen der externen Tabelle Daten aus mehreren NAV-Tabellen verwenden muss und dabei auch eine gewisse Logik haben möchte/muss, möchte ich dies (als NAV-Entwickler) gerne in NAV lösen.
Spricht denn etwas dagegen, die externen Tabellen über Exportfunktionen aus Navision heraus zu füllen?

Gruß
Jörg

Re: Daten mit anderen MSSQL Datenbank austauschen

25. Januar 2012 20:23

JRenz hat geschrieben:Hallo Sebastian,

da ich beim Befüllen der externen Tabelle Daten aus mehreren NAV-Tabellen verwenden muss und dabei auch eine gewisse Logik haben möchte/muss, möchte ich dies (als NAV-Entwickler) gerne in NAV lösen.
Spricht denn etwas dagegen, die externen Tabellen über Exportfunktionen aus Navision heraus zu füllen?

Gruß
Jörg



...gerne in NAV lösen...

Was spricht dagegen, sich ein Buch über SQL Server Integration Services zu kaufen?
Das ist nix anderes als ein Data-Connector, wo du mit Kenntnissen in relationen Datenbanken dieselbe "gewisse Logik" abbilden kannst.
Dann hast du statt SETRANGE, SETFILTER einfach mehrere INNER JOIN und WHERE Bedingungen.
Ich wette, Jörg Stryk kann dir nähere Infos und eine kleine Schulung anbieten? :-)

edit: das was man in NAV mit 100 Zeilen Code für für lesende Abfragen löst, ist in TSQL in 10 Zeilen niedergeschrieben. TSQL kann AFAIK deutlich mehr als C/AL beim Datenschaufeln und ist vermutlich auch deutlich schneller in der Ausführung, was sagt Jörg dazu?

Re: Daten mit anderen MSSQL Datenbank austauschen

25. Januar 2012 20:36

Hi,

vielen Dank für die Hinweise und Lösungsvorschläge.
Ich habe aus den vielen anderen Foren-Beiträge meines Namensvetters Jörg Stryk auch schon mitbekommen, dass Jörg ein absoluter SQL-Fachmann ist.
Bis jetzt habe ich allerdings noch kein Argument bekommen, das gegen eine Implementierung in NAV spricht - zumal in meiner speziellen Kundenanforderung folgendes gegeben ist:
a) der Kunde möchte die Datenübergabe (zumindest vorerst) nicht automatisch durchführen - sondern immer selber starten
b) der Kunde selber hat keinen eigenen SQL-Administrator im Hause, der ebentuelle Probleme SQL-seitig analysieren könnte
c) das Ganze sollte natürlich möglichst preisgünstig (oder billig :?: ) gelöst werden

Gruß
Jörg

Re: Daten mit anderen MSSQL Datenbank austauschen

26. Januar 2012 12:32

Die Business Logik sollte auch in Navision bleiben. Meine Idee dabei wäre, wenn jemand den "Knop" drückt (es soll ja manuell passieren) werden die Daten plausibilisiert, miteinander verknüpft und in eine Puffertabelle (in Navision) geschrieben. SQL holt sich diese Daten dann ab und schreibt sie (am besten 1:1) über den SQL-Server Agent in die andere Tabelle.