2010-09-30 8 views
1

J'ai deux tables provenant de deux bases de données différentes.Fusion de deux tables provenant de bases de données différentes

Par exemple:

Table: Articles1 - Database: db1 
Attributes: id date headline text 

Table: Articles2 - Database: db2 
Attributes: id date headline text 

Maintenant, je veux faire un flux d'article avec des articles des deux tables combinées et triées par date. A ma connaissance, il n'est pas possible de faire des requêtes à travers deux bases de données différentes?

Que puis-je faire? Faire une table temporaire et insérer tous les articles et trier et imprimer? Faire un cronjob obtenir tous les articles?

Btw. Je le fais avec MS SQL et ASP.

Merci à l'avance


Après i receieved réponses som je suis en train de le faire:

Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open "Provider=Provider;Data Source=myDataSource;Initial Catalog=Catalog1;User Id=myID;Password=myPassword1;" 
Set Conn2 = Server.CreateObject("ADODB.Connection") 
Conn2.Open "Provider=Provider;Data Source=myDataSource;Initial Catalog=Catalog2;User Id=myID;Password=myPassword2;" 

strSQL = "SELECT id, datetime, headline, text "&_ 
      "FROM Conn.dbo.vArticles "&_ 
      "UNION ALL "&_ 
      "SELECT AutoID as id, Dato as datetime, Notat as headline, Notat as text "&_ 
      "FROM Conn2.dbo.Notat WHERE NotatTypeID = '5'" 

DIM objRS 
Set objRS = Server.CreateObject("ADODB.Recordset") 
objRS.Open mySQL, Conn 


objRS.Close 
Set objRS = Nothing 
objConn.Close 
Set objConn = Nothing 

Mais obtenir quelques erreurs.

+0

Vous devez nous indiquer quelles erreurs. –

+0

Erreur ADODB.Recordset '800a0bb9' Les arguments sont de type incorrect, sont hors de portée acceptable ou sont en conflit les uns avec les autres. –

+0

Mise à jour: nom d'objet incorrect 'Conn.dbo.vTest2'. –

Répondre

3

Il est possible d'interroger 2 bases de données différentes. Il suffit d'utiliser le format de nom de 3 parties. Ce qui précède suppose que les bases de données se trouvent sur la même instance SQL Server. Sinon, vous devrez configurer un serveur lié et utiliser le format de nom de 4 parties.

+0

J'essaye cela mais je ne travaille pas vraiment. Vérifiez les mises à jour pour ma question. –

+0

Ce que je ne comprends pas, c'est comment vous allez faire la connexion avec deux connexions différentes? Qu'est-ce que db1 et db2? Puis-je voir les chaînes de connexion? –

+0

La connexion est une connexion à l'hôte. Tant que les bases de données résident sur le même hôte, il sera en mesure de les interroger à la fois –

1

Ceci est non testé mais si tant que les bases de données résident sur le même hôte, vous pouvez être en mesure de faire quelque chose comme ceci:

SELECT db,id,date,headline,text 
FROM (
    SELECT 'db1' AS db,id,date,headline,text FROM db1.dbo.Articles1 
    UNION ALL 
    SELECT 'db2' AS db,id,date,headline,text FROM db2.dbo.Articles2 
) tmp 
ORDER BY date DESC 

MISE À JOUR:

Basé sur le code que vous avez fourni :

Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open "Provider=Provider;Data Source=myDataSource;Initial Catalog=Catalog1;User Id=myID;Password=myPassword1;" 

strSQL = "SELECT id, datetime, headline, text "&_ 
      "FROM db1.dbo.vArticles "&_ 
      "UNION ALL "&_ 
      "SELECT AutoID as id, Dato as datetime, Notat as headline, Notat as text "&_ 
      "FROM db2.dbo.Notat WHERE NotatTypeID = '5'" 

DIM objRS 
Set objRS = Server.CreateObject("ADODB.Recordset") 
objRS.Open strSQL, Conn 

objRS.Close 
Set objRS = Nothing 
objConn.Close 
Set objConn = Nothing 

Où db1 et db2 sont les noms de vos bases de données. Je ne suis pas habitué à aspiter, donc je ne suis pas sûr à 100% de la syntaxe

Il semble y avoir une erreur dans le nom de variable que vous appelez pour l'instruction SQL. J'ai mis à jour la ligne objRS.Open mySQL, Conn à objRS.Open strSQL, Conn

Questions connexes