2008-08-19 11 views
4

Ich versuche, einen Bericht zu erstellen, indem ich 2 Datenbanken (Sybase) in klassischem ASP abfrage.Abfrage auf 2 Tabellen auf verschiedenen Datenbankservern auswählen

Ich habe 2 Verbindungszeichenfolgen erstellt:

Conna für databaseA
connB für DatabaseB

Beide Datenbanken sind auf dem gleichen Server (weiß nicht, ob diese Angelegenheiten)

Abfragen:

q1 = SELECT column1 INTO #temp FROM databaseA..table1 xyz = "a"
= q2 SELECT columnA, columnB, ..., columnZ FROM table2 einer #temp b WHERE b.column1 =

a.columnB

gefolgt von:

Response.write (rstsql)
Satz rstSQL = Create ("ADODB.Recordset")
rstSQL.Open q1, Conna
rstSQL.Open q2, connB

Wenn ich versuche, diese Seite in einem Browser zu öffnen, erhalte ich Fehlermeldung:

Microsoft OLE DB-Provider für ODBC-Treiber-Fehler '80040e37'

[Datadirect] [ODBC Sybase Draht Protokolltreiber] [SQL Server] #temp nicht gefunden. Geben Sie owner.objectname an oder verwenden Sie sp_help, um zu überprüfen, ob das Objekt vorhanden ist (sp_help kann viele Ausgaben erzeugen).

Könnte jemand bitte mir helfen zu verstehen, was das Problem ist und mir helfen, es zu beheben?

Danke.

Antwort

4

Bei beiden Abfragen sieht es so aus, als ob Sie versuchen, in #temp einzufügen. #temp befindet sich in einer der Datenbanken (aus Gründen des Arguments, DatenbankA). Wenn Sie also versuchen, in #temp von databaseB einzufügen, meldet es, dass es nicht existiert.

Probieren Sie es aus In #temp Von-In databaseA.dbo ändern. # Temp Von in beiden Aussagen.

Stellen Sie außerdem sicher, dass die Verbindungszeichenfolgen Berechtigungen für die andere DB haben, andernfalls wird dies nicht funktionieren.

Update: in Bezug auf die temporäre Tabelle außerhalb des Geltungsbereichs - wenn Sie eine Verbindungszeichenfolge mit Berechtigungen für beide Datenbanken haben, können Sie diese für beide Abfragen verwenden (während die Verbindung aufrechterhalten wird). Achten Sie beim Abfragen der Tabelle in der anderen Datenbank darauf, das Format [DBName]. [Eigentümer]. [Tabellenname] zu verwenden, wenn Sie auf die Tabelle verweisen.

4

Ihre temporäre Tabelle außerhalb des Bereichs ist, ist es nur ‚lebendig‘ während der ersten Verbindung und wird nicht in der zweiten Verbindung einfach alle sie bewegen sich in einem Block von Code, und führen Sie es in einer conection

erhältlich
2

Temperatur ist in Q2 nicht verfügbar.

Alle Ihre Arbeit kann in einer Abfrage durchgeführt werden:


SELECT a.columnA, a.columnB,..., a.columnZ 
FROM table2 a 
INNER JOIN (SELECT databaseA..table1.column1 
      FROM databaseA..table1 
      WHERE databaseA..table1.xyz = 'A') b 
    ON a.columnB = b.column1 
Verwandte Themen