Domanda

Sto cercando di generare un report interrogando 2 database (Sybase) in ASP classico.

Ho creato 2 stringhe di connessione:

connA per databaseA
connB per databaseB

Entrambi i database sono presenti sullo stesso server (non so se questo è importante)

Interrogazioni:

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

seguito da:

response.Write(rstsql) <br>
set rstSQL = CreateObject("ADODB.Recordset")<br>
rstSQL.Open q1, connA<br>
rstSQL.Open q2, connB

Quando provo ad aprire questa pagina in un browser, ricevo il messaggio di errore:

Errore '80040e37' del provider Microsoft OLE DB per i driver ODBC

[DataDirect][Driver ODBC Sybase Wire Protocol][SQL Server]#temp non trovato.Specificareowner.objectname o utilizzare sp_help per verificare se l'oggetto esiste (sp_help può produrre molti output).

Qualcuno potrebbe aiutarmi a capire qual'è il problema e aiutarmi a risolverlo?

Grazie.

È stato utile?

Soluzione

Con entrambe le query, sembra che tu stia tentando di inserire in #temp.#temp si trova su uno dei database (per amor di argomento, databaseA).Pertanto, quando provi a inserire #temp dal databaseB, segnala che non esiste.

Prova a cambiarlo da In #temp Da A In databaseA.dbo.#temp Da in entrambe le dichiarazioni.

Inoltre, assicurati che le stringhe di connessione abbiano i permessi sull'altro DB, altrimenti non funzionerà.

Aggiornamento:relativo alla tabella temporanea che esce dall'ambito: se si dispone di una stringa di connessione che dispone di autorizzazioni su entrambi i database, è possibile utilizzarla per entrambe le query (mantenendo attiva la connessione).Quando esegui una query sulla tabella nell'altro DB, assicurati di utilizzare il formato [NomeDB].[Proprietario].[NomeTabella] quando fai riferimento alla tabella.

Altri suggerimenti

La tua tabella temporanea è fuori portata, è solo "viva" durante la prima connessione e non sarà disponibile nella seconda connessione, basta spostarla tutto in un blocco di codice ed eseguilo all'interno di una connezione

la temperatura non rientra nell'ambito di q2.

Tutto il tuo lavoro può essere svolto in una sola query:


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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top