![]() |
Datenbank: MSSQO • Version: 2000 • Zugriff über: ADO.NET
ODBC Verbindung innerhalb des MSSQL Servers aufbauen
Wir haben hier das Problem, dass mit 2 Serversystem gearbeitet wird: Einer IBM AS400 Machine und einem MSSQL Server. Bevor alles auf den SQL Server migriert ist, haben wir hier teilweise ein Misch an Informationen in den beiden Systemen.
Für meinen konkreten Fall muss ich innerhalb vom SQL Server (Stored Procedure oder Funktion, egal), auf eine 'Tabelle' der AS400 lesend zugreifen. Wir haben einen ODBC Treiber für die AS400, die die Verbindung über ADO.NET klappt aus C# heraus. Kann der SQL Server dieser ODBC irgendwie intern auch nutzen. Ich möchte letzten Endes über einen Befehl, den ich an den SQL Server schicken, Daten vom AS400 erhalten. |
Re: ODBC Verbindung innerhalb des MSSQL Servers aufbauen
Zitat:
Man muss im Enterprise Manager unter Sicherheit->Verbindungsserver einen neuen Eintrag vornehmen. |
Re: ODBC Verbindung innerhalb des MSSQL Servers aufbauen
Danke shmia,
hab jetzt eine Lösung direkt über T-SQL gesucht, und auch schon fast zufriedenstellend gefunden... Das Stichwort heisst spAddLinkedServer: Folgendes SQL Skript klappt schon mal fast:
SQL-Code:
Führe ich allerdings ein Select aus. z.B. über:
EXEC sp_addlinkedserver
@server = 'Servername', @srvproduct = 'AS400 Client Access', @provider = 'MSDASQL', @provstr = 'Driver={iSeries Access ODBC Driver};SYSTEM=AS400;CMT=0;DBQ=DBNAME_ON_AS400;NAM=0;DFT=5;DSP=1;TFT=0;TSP=0;DEC=0;XDYNAMIC=0;RECBLOCK=2;BLOCKSIZE=32;SCROLLABLE=0;TRANSLATE=0;LAZYCLOSE=1;LIBVIEW=0;REMARKS=0;CONNTYPE=0;SORTTYPE=0;PREFETCH=0;DFTPKGLIB=QGPL;LANGUAGEID=ENU;SORTWEIGHT=0;MAXFIELDLEN=32;COMPRESSION=0;ALLOWUNSCHAR=0;SEARCHPATTERN=1;MGDSN=0' EXEC sp_serveroption @server = 'DBNAME_ON_AS400', @optname = 'data access', @optvalue = TRUE EXEC sp_addlinkedsrvlogin @rmtsrvname = 'DBNAME_ON_AS400', @useself = false, @rmtuser = 'username', @rmtpassword = 'password'
SQL-Code:
kriege ich zwar Records angezeigt, ABER NICHT ALLE :wiejetzt:
select m.* from OpenQuery(DBNAME_ON_AS400, 'select * from Medecinn order by nommed') m
Ich geh mal von irgendwelchen Cache Problemen aus, hab aber keine Ahnung wo ich da angreifen könnte... Jemand noch eine Idee? |
Re: ODBC Verbindung innerhalb des MSSQL Servers aufbauen
Viiiiel googeln löste dann plötzlich mein Problem...
Es lag am Connectionstring, den ich im Parameter @provstr bei sp_addlinkedserver übergebe. Ist wohl ein AS400 typisches Problem. Durch Setzen von BLOCKSIZE=0 (anstatt 32 = 32kB) werden ALLE Zeilen zurückgeliefert... Hier nochmals das Ganze vervollständigt:
SQL-Code:
Abfragen kann man das Ganze dann mit
EXEC sp_addlinkedserver
@server = 'Servername', @srvproduct = 'AS400 Client Access', @provider = 'MSDASQL', @provstr = 'Driver={iSeries Access ODBC Driver};SYSTEM=AS400;CMT=0;DBQ=DBNAME_ON_AS400;NAM=0;DFT=5;DSP=1;TFT=0;TSP=0;DEC=0;XDYNAMIC=0;RECBLOCK=2;BLOCKSIZE=0;SCROLLABLE=0;TRANSLATE=0;LAZYCLOSE=1;LIBVIEW=0;REMARKS=0;CONNTYPE=0;SORTTYPE=0;PREFETCH=0;DFTPKGLIB=QGPL;LANGUAGEID=ENU;SORTWEIGHT=0;MAXFIELDLEN=32;COMPRESSION=0;ALLOWUNSCHAR=0;SEARCHPATTERN=1;MGDSN=0' EXEC sp_serveroption @server = 'DBNAME_ON_AS400', @optname = 'data access', @optvalue = TRUE EXEC sp_addlinkedsrvlogin @rmtsrvname = 'DBNAME_ON_AS400', @useself = false, @rmtuser = 'username', @rmtpassword = 'password'
SQL-Code:
select m.* from OpenQuery(DBNAME_ON_AS400, 'select * from Medecinn order by nommed') m
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz