Wählen Sie Abfrage über 2 Tabellen, die auf anderen Datenbank-Servern
-
08-06-2019 - |
Frage
Ich versuche, einen Bericht zu erstellen, das Abfragen 2 Datenbanken (Sybase) in der klassischen ASP.
Erstellt habe ich 2 connection strings:
connA für databaseA
connB für databaseB
Beide Datenbanken auf dem gleichen server vorhanden (weiß nicht, ob dies von Bedeutung ist)
Abfragen:
q1 = SELECT column1 INTO #temp FROM databaseA..table1 WHERE xyz="A"
q2 = SELECT columnA,columnB,...,columnZ FROM table2 a #temp b WHERE b.column1=a.columnB
gefolgt von:
response.Write(rstsql) <br>
set rstSQL = CreateObject("ADODB.Recordset")<br>
rstSQL.Open q1, connA<br>
rstSQL.Open q2, connB
Wenn ich versuche zu öffnen die Seite in einem browser, bekomme ich die Fehlermeldung:
Microsoft OLE DB Provider for ODBC Drivers Fehler "80040e37'
[DataDirect][ODBC Sybase Wire Protocol driver][SQL Server]#temp nicht gefunden.Geben Sie Eigentümer.Objektname oder verwenden Sie sp_help, um zu überprüfen, ob das Objekt vorhanden ist (sp_help können produzieren jede Menge output).
Könnte jemand bitte helfen Sie mir zu verstehen, was das problem ist und mir helfen es zu beheben?
Vielen Dank.
Lösung
Mit beiden Abfragen, es sieht aus wie Sie versuchen insert into #temp.#temp befindet sich auf einer der Datenbanken (für Argumente sake, databaseA).Also, wenn Sie versuchen, insert into #temp from databaseB, meldet es, dass es nicht existiert.
Probieren Sie es aus In #temp Von zu In databaseA.dbo.#temp Von in beiden Aussagen.
Auch, stellen Sie sicher, dass die Verbindungszeichenfolgen, die Berechtigungen auf der anderen DB, sonst wird das nicht funktionieren.
Update:in Bezug auf die temp-Tabelle going out of scope - wenn Sie eine Verbindungszeichenfolge, die Berechtigungen für beide Datenbanken haben, dann könnten Sie dies für beide Abfragen (während halten die Verbindung am Leben zu erhalten).Beim Abfragen der Tabelle in die andere DB, sicher sein, zu verwenden [DBName].[Owner].[TableName] format-wenn Sie sich auf die Tabelle.
Andere Tipps
Ihre temporäre Tabelle außerhalb des Bereichs, es ist nur "lebendig", während die erste Verbindung, und wird nicht in die 2. Verbindung Bewegen Sie einfach alles in einen block von code, und führen Sie es in einem conection
temp außerhalb des Bereichs in q2.
Deine Arbeit, die getan werden kann in einer Abfrage an:
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