合并来自不同数据库的两个表

时间:2010-09-30 11:00:18

标签: sql asp-classic

我有两个来自两个不同数据库的表。

例如:

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

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

现在我想用两个表中的文章组合并按日期排序。据我所知,不可能跨两个不同的数据库进行查询?

我该怎么办?制作临时表并插入alle文章并排序和打印?制作一份cronjob获取所有文章?

顺便说一下。我正在使用MS SQL和ASP。

提前致谢


在我收到som回答后,我正试图这样做:

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

但是有些错误。

2 个答案:

答案 0 :(得分:3)

可以跨2个不同的数据库进行查询。只需使用3部分名称格式。

SELECT id, date, headline, text 
FROM db1.dbo.Articles1
UNION ALL
SELECT id, date, headline, text 
FROM db2.dbo.Articles2

以上假设数据库位于同一SQL Server实例上。如果不是,您将需要设置链接服务器并使用4部分名称格式。

答案 1 :(得分:1)

这是未经测试的,但只要数据库驻留在同一主机上,您就可以执行以下操作:

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

更新:

根据您提供的代码:

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

其中db1和db2是数据库的名称。我不习惯asp,所以我不能100%确定语法

您为SQL语句调用的变量名中似乎存在错误。我已将objRS.Open mySQL, Conn行更新为objRS.Open strSQL, Conn