当前位置: 代码迷 >> Sql Server >> SqlServer 怎样实现动态视图查询多个库的数据,该如何处理
  详细解决方案

SqlServer 怎样实现动态视图查询多个库的数据,该如何处理

热度:23   发布时间:2016-04-24 09:58:33.0
SqlServer 怎样实现动态视图查询多个库的数据
在[A]库中有一张表结构如下
COMPANY
CITY_CODE           DATABASE_NM              
--------------------------------------------- 
CNY                         DATABASE01
SHA                         DATABASE02
USD                         DATABASE03
MFM                         DATABASE04

具体需求是:从A库的[COMPANY]中得到每一个货币对应其他国家货币的汇率,[COMPANY]的CITY_CODE的值代表本地货币种类,[DATABASE_NM]的值是关联的数据库的名称。库[DATABASE01]~[DATABASE02]就是我们要得到的本地货币对外币的汇率表。

之前写的视图是:
SELECT

查询SQL语句
FROM
[DATABASE01].dbo.XX A
LEFT JOIN [DATABASE01].dbo.XXX B ON A.cexch_name = B.cexch_name AND B.i_id <> '1'
LEFT JOIN [DATABASE01].dbo.XXXX C ON C.i_id = '1'

WHERE
    A.itype = '2'

UNION

SELECT

查询SQL语句
FROM
[DATABASE02].dbo.XX A
LEFT JOIN [DATABASE02].dbo.XXX B ON A.cexch_name = B.cexch_name AND B.i_id <> '1'
LEFT JOIN [DATABASE02].dbo.XXXX C ON C.i_id = '1'

WHERE
    A.itype = '2'

UNION

SELECT

查询SQL语句
FROM
[DATABASE03].dbo.XX A
LEFT JOIN [DATABASE03].dbo.XXX B ON A.cexch_name = B.cexch_name AND B.i_id <> '1'
LEFT JOIN [DATABASE03].dbo.XXXX C ON C.i_id = '1'

WHERE
    A.itype = '2'

UNION

SELECT

查询SQL语句
FROM
[DATABASE04].dbo.XX A
LEFT JOIN [DATABASE04].dbo.XXX B ON A.cexch_name = B.cexch_name AND B.i_id <> '1'
LEFT JOIN [DATABASE04].dbo.XXXX C ON C.i_id = '1'

WHERE
    A.itype = '2'


现在我们项目要求,写成一个循环语句 因为[A]的[Company]表的数据不是固定的,有可能会追加其他国家的货币种类!
求大神指导啊,已经卡在这里一个多星期了。
我的想法是:假设有20个国家使用这个网站,然后写一个存储过程(pro_test),循环A库,表[COMPANY]的所有数据:
IF (@dateBase_nm = 'DATABASE01')
BEGIN

INSERT INTO A.dbo.EXCHANGE_RATE_INFO
(A, B, C)
SELECT A,B,C 
                        FROM
[DATABASE01].dbo.Department
END

IF (@dateBase_nm = 'DATABASE02')
BEGIN

INSERT INTO A.dbo.EXCHANGE_RATE_INFO
(A, B, C)
SELECT A,B,C 
                        FROM
[DATABASE02].dbo.Department
END
       ........
[EXCHANGE_RATE_INFO]是一个临时表,插入完数据,用视图(view_test)查询[EXCHANGE_RATE_INFO],以便在项目中使用,问题在于 我怎么使用视图先调用一个存储过程[pro_test],再查询[EXCHANGE_RATE_INFO]?或者大家有什么更简单的办法来实现这样的功能。(散100分 大神们还等什么?)
------解决思路----------------------
语法
CREATE TRIGGER trigger_name 
ON { table 
------解决思路----------------------
 view } 
[ WITH ENCRYPTION ] 

    { { FOR 
------解决思路----------------------
 AFTER 
------解决思路----------------------
 INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } 
        [ WITH APPEND ] 
        [ NOT FOR REPLICATION ] 
        AS 
        [ { IF UPDATE ( column ) 
            [ { AND 
------解决思路----------------------
 OR } UPDATE ( column ) ] 
                [ ...n ] 
        
------解决思路----------------------
 IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask ) 
                { comparison_operator } column_bitmask [ ...n ] 
        } ] 
        sql_statement [ ...n ] 
    } 

  相关解决方案