2008-08-19 10 views
4

Je tente de générer un rapport en interrogeant 2 bases de données (Sybase) dans ASP classique.Sélectionnez Requête sur 2 tables, sur différents serveurs de base de données

J'ai créé 2 chaînes de connexion:

conna pour databaseA
Connb pour databaseB

Les deux bases de données sont présentes sur le même serveur (ne sais pas si cette question est importante)

Requêtes:

q1 = SELECT column1 EN #temp DE databaseA..table1 xyz = "A"
q2 = Sélectionner COLUMNA, ColumnB, ..., à partir de columnZ table_2 un #temp B où b.column1 = a.columnB

suivie par:

Response.write (rstsql)
ensemble rstSQL = CreateObject ("ADODB.Recordset")
rstSQL.Open q1, conna
rstSQL.Open q2, Connb

Lorsque je tente d'ouvrir cette page dans un navigateur, je reçois un message d'erreur:

Microsoft OLE DB pour pilotes ODBC Erreur '80040e37'

[DataDirect] [fil Sybase ODBC Pilote de protocole] [SQL Server] #temp non trouvé. Spécifiez owner.objectname ou utilisez sp_help pour vérifier si l'objet existe (sp_help peut produire beaucoup de résultats).

Quelqu'un peut-il s'il vous plaît m'aider à comprendre ce que le problème est et m'aider à le réparer?

Merci.

Répondre

4

Avec les deux requêtes, il semble que vous essayez d'insérer dans #temp. #temp est situé sur l'une des bases de données (par exemple, databaseA). Ainsi, lorsque vous essayez d'insérer dans #temp de la base de donnéesB, il signale qu'il n'existe pas.

essayez de le changer de Dans #temp De-Dans databaseA.dbo. Temp # De dans les deux déclarations.

De même, assurez-vous que les chaînes de connexion ont des autorisations sur l'autre DB, sinon cela ne fonctionnera pas.

Mise à jour: relative à la sortie de la table temporaire - si vous avez une chaîne de connexion avec des autorisations sur les deux bases de données, vous pouvez l'utiliser pour les deux requêtes (tout en conservant la connexion). Lors de l'interrogation de la table dans l'autre BD, veillez à utiliser le format [DBName]. [Propriétaire]. [TableName] lorsque vous faites référence à la table.

4

votre table temporaire est hors de portée, il est seulement « vivant » au cours de la première connexion et ne sera pas disponible dans la 2ème connexion Il suffit de déplacer tous dans un bloc de code et l'exécuter dans une conection

2

La température est hors champ dans q2.

Tout votre travail peut être fait en une seule requête:


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 
Questions connexes