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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top