Question

Je suis en train de générer un rapport à l'interrogation de 2 bases de données (Sybase) en ASP classique.

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

connA pour databaseA
connB pour databaseB

Les deux bases de données sont présents sur le même serveur (je ne sais pas si c'est important)

Requêtes:

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

suivi de:

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

Lorsque j'essaie d'ouvrir cette page dans un navigateur, j'obtiens le message d'erreur:

Microsoft OLE DB Provider for ODBC Drivers erreur '80040e37'

[DataDirect][ODBC Sybase Wire Protocol driver][SQL Server]#temp pas trouvé.Spécifier propriétaire.objectname ou de l'utilisation sp_help pour vérifier si l'objet existe (sp_help peut produire beaucoup de sortie).

Quelqu'un pourrait-il svp m'aider à comprendre quel est le problème et m'aider à résoudre ce problème?

Merci.

Était-ce utile?

La solution

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

Essayez de changer de En #temp À partir de pour En databaseA.dbo.#temp À partir de dans les deux déclarations.

Aussi, assurez-vous que les chaînes de connexion disposez des autorisations sur les autres DB, sinon cela ne fonctionnera pas.

Mise à jour:concernant la table temp de sortir de la portée - si vous avez une chaîne de connexion qui dispose des autorisations sur les deux bases de données, alors vous pourriez utiliser cette méthode pour les deux requêtes (tout en gardant la connexion de son vivant).Alors que l'interrogation de la table dans l'autre DB, assurez-vous d'utiliser [DBName].[Le propriétaire].[TableName] format en se référant à la table.

Autres conseils

votre table temporaire est hors de portée, il est seulement "en vie" lors de la première connexion et ne sera pas disponible dans la 2ème connexion Il suffit de déplacer tout ça dans un bloc de code et l'exécuter à l'intérieur d'une conection

temp est hors de portée dans t2.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top