Frage

Ich versuche, ein aus einer verknüpften Datenbank in MS SQL 2005. Die verknüpfte Datenbank ist eine DB2-Datenbank auf einem Server iseries procedured gespeichert ist, auszuführen. Ich bin mit den iSeries IBMDASQL Service-Provider. Ich bin in der Lage, die gespeicherte Prozedur ohne Probleme mit einem einfachen Vbscript und ado abzufragen. Wenn ich versuche, die gleiche gespeicherte Prozedur in Query Analyzer auf dem SQL Server ausgeführt werden, sehe ich nie irgendwelche Ergebnisse. Query Analyzer immer zeigen ‚Befehl ausgeführt‘ und wenn ich die select ausführen * auf der temporären Tabelle, erscheinen keine Werte. Was mache ich falsch????? Dank!

- Code aus Query Analyzer unter -

DECLARE @emailToAddress         char(50)
DECLARE @emailFromAddress       char(50)

set @emailToAddress = 'customer.service@company.com'
set @emailFromAddress = 'customer@gmail.com'

If Object_ID('tempdb..#tmpResultTbl') Is Not Null
    Drop Table #tmpResultTbl

Create Table #tmpResultTbl
(
OUTPGMID Char(150))

--SET FMTONLY Off
Set NoCount On
Insert Into #tmpResultTbl 
EXEC ('CALL abicqual.VP_GETCCEPGMID(?, ?) ', @emailToAddress, @emailFromAddress) AT MAM400 

Select * From #tmpResultTbl

AKTUALISIERT: Hier ist der aktualisierte Code Openquery verwendet ... noch kein Glück: (

DECLARE @TSQL varchar (8000) DEKLARIEREN @emailToAddress VARCHAR (50) DEKLARIEREN @emailFromAddress VARCHAR (50) SET @emailToAddress = 'customer.service@company.com' SET @emailFromAddress = 'customer@gmail.com' SET @TSQL = 'SELECT * FROM OPENQUERY (MAM400,' 'CALL abicqual.VP_GETCCEPGMID (' ' ' '' '' + @emailToAddress +' '', '' ''' + @emailFromAddress + '' ' ''' + ')' '' + ')' drucken @TSQL Exec (@TSQL)

- Ausgabe below-- SELECT * FROM OPENQUERY (MAM400, 'CALL abicqual.VP_GETCCEPGMID (' 'customer.service@company.com' ' '' customer@gmail.com '')') Msg 7357, Ebene 16, Status 2, Zeile 1 Kann das Objekt nicht verarbeiten "CALL abicqual.VP_GETCCEPGMID ('customer.service@company.com‘, 'customer@gmail.com')". Der OLE DB-Provider „IBMDASQL“ für den Verbindungsserver „MAM400“ zeigt an, dass entweder das Objekt keine Spalten oder der aktuelle Benutzer keine Berechtigungen für das Objekt.

War es hilfreich?

Lösung

Es stellte sich heraus, dass es eine Reihe von Problemen mit dem IBMDASQL Anbieter sind, die ich benutzte. Ob Sie es glauben oder nicht, ist es schneller und zuverlässiger den Microsoft OLE DB-Provider für ODBC-Treiber zu verwenden. Nachdem Sie einen neuen Verbindungsserver mit diesem Anbieter zu schaffen, die alle meinen früheren SQL-Versuche gearbeitet richtig. Cheers!

Andere Tipps

Ich bin mit den Microsoft DB2OLEDB-Provider, die als Teil des Feature Packs für SQL 2005 verfügbar ist - April 2006. Es ist auch Teil von Host Integration Services. Es hakt in die AS / 400 mit dem DRDA (Oracle-Stil) Protokoll.

Sie können es separat herunterladen, aber es wird nur auf SQL-Standard, Enterprise oder Entwickler (nicht Express) installiert werden.

Ich finde auch, dass der Aufbau die vollständige Abfrage, die ich auf der DB2 / 400-Box ausgeführt werden soll und dann in einem VARCHAR (MAX) string Einwickeln, die auch die „SELECT * FROM OPENQUERY enthalten (--linkedservername -, - -DB2 / 400-Abfrage mit params--)“und dann die Sp_execute oder EXEC-Befehle liefert die besten Ergebnisse.

Es ist sogar möglich, RPG-Code in DB2 / 400 SQL-Prozeduren einpacken und dann rief (mit params) von dem MS SQL Server und zurück ergebnislos eingestellt als MS SQL-Tabelle.

scroll top