SQL查询,包括来自多个服务器的数据库

时间:2011-09-09 12:34:12

标签: sql asp-classic

目前这是ASP Classic:

我现在的查询:

SELECT     
    i.CONCOM
,   COALESCE(SUM(CASE WHEN C.CATEGORY_ID = '30' THEN 0 ELSE t.LOGMINS END), 0) AS TotalWithoutNew
,   COALESCE(SUM(t.LOGMINS), 0) AS TotalAllId 
FROM         
    INQUIRY AS i 
    INNER JOIN 
        TIMELOG AS t 
        ON t.INQUIRY_ID = i.INQUIRY_ID 
    INNER JOIN 
        PROD AS P 
        ON i.PROD_ID = P.PROD_ID 
    INNER JOIN 
        CATEGORY AS C 
        ON P.CATEGORY_ID = C.CATEGORY_ID 
WHERE 
    " & sqlwhereclause & " 
GROUP BY 
    i.CONCOM 
ORDER BY 
    totalwithoutnew desc"

我需要连接的数据库,用于连接的字符串

DatabaseConnectionDB.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & AccessDBLocation & "data.mdb;Jet OLEDB:Database Password=redacted;"

在访问数据库中有一个名为tbl_customer的表,它有两个字段company和priority。我需要在i.concom和公司上进行联接,以便从第二个数据库中获取优先级。

我不会说谎,这远远超出我的范围,我会感激任何帮助:)

1 个答案:

答案 0 :(得分:0)

我建议采用几种不同的方法。

将tbl_Customer数据复制到包含其他所有内容的数据库中。我最喜欢这个,因为以任何频率命中这个Access数据库必然会与将客户数据写入数据库的任何前端进程冲突。这里的挑战是定义适当的刷新率(每周,每天,每小时),以使您的应用保持最新,但不会影响访问。

实施可以是预定的拉动,如SSIS包,也可以通过类似于与客户表中的保存事件关联的宏的推送来推送。

此解决方案会将缓存的值放入ASP数据集对象中。当您执行我将转换为存储过程的查询时,我会通过user defined table type将数据集传递给proc,然后您可以在查询中加入该表。

青铜

我抛弃的最后一个选项是每次都要查询数据,然后将其加载到传递给查询的派生表中。它不漂亮,你必须滚动你自己的健全性检查以逃避刻度线',当你构建查询时,像这样

DECLARE
    @query varchar(max)
,   @dyanmic_where varchar(max)
SELECT @query = N'
SELECT     
    i.CONCOM
,   COALESCE(SUM(CASE WHEN C.CATEGORY_ID = ''30'' THEN 0 ELSE t.LOGMINS END), 0) AS TotalWithoutNew
,   COALESCE(SUM(t.LOGMINS), 0) AS TotalAllId 
FROM         
    INQUIRY AS i 
    INNER JOIN 
        TIMELOG AS t 
        ON t.INQUIRY_ID = i.INQUIRY_ID 
    INNER JOIN 
        PROD AS P 
        ON i.PROD_ID = P.PROD_ID 
    INNER JOIN 
        CATEGORY AS C 
        ON P.CATEGORY_ID = C.CATEGORY_ID 
    INNER JOIN
        (
            -- this gets built dynamically based on retrieved values
            SELECT 1, ''hello kitty'', 0
            UNION ALL 2, '''', 3
        ) D (concom, company, priority)
        ON D.concom = i.CONCOM
WHERE 
    '+ @dyanmic_where + N'
GROUP BY 
    i.CONCOM 
ORDER BY 
    totalwithoutnew desc
'

EXECUTE(@query)

如果其中任何一个引起你的兴趣,请告诉我,我很乐意提供更多详情