none
多数据库查询即数据筛选问题!急。。。。 RRS feed

  • 问题

  • 1.A系统生成一个关联的SQL查询语句,关联的表来自不同的库,对于A系统来说这些表是属于同一个库!(这个SQL语句,是自定义配置的)

    2.B系统拿到A系统的SQL语句,怎么去执行?

    我想了一些办法,请大家帮忙出出注意,是不是有更好的解决办法:

    1. B系统建立多张表,将不同数据库的表数据放到一个库里,然后可以直接使用A系统的SQL语句。

    2.在数据库中使用链接库,然后直接运行A系统的SQL语句,这个不能用!

    3.将不同数据库的表的数据,都放到一个DataSet中,然后进行筛选,但是DataSet中好像不能直接使用SQL语句

    4.考虑过使用动态Linq,如果使用动态LINQ 就需要将SQL语句转换成LinQ,因为不知道SQL会有多复杂,所以这个代价可能比较大!

     


    小飞鱼Гìsん
    2011年7月26日 12:37

全部回复

  • Hi:

    如果A系统和B系统都是在同一个SQL Server

    可以直接 用 [IP位址].[数据库名].[数据表名] 来查询

    例如:A系统为192.168.1.101,数据库名为A,数据表名为tb_A

             B系统为192.168.1.101,数据库名为B,数据表名为tb_B

    所以若以B系统要查询A系统的话,例:Select * from [192.168.1.101].dbo.[A].[tb_A]就可以查到A的数据了

    以上不知道是不是您要的?


    Shadowと愉快なコード達
    Please correct me if my concept is wrong
    2011年7月26日 14:16
    1. 分別在DB Server A建立Linked Server連接至DB Server B,在DB Server B建立Linked Server連接至DB Server A。
    2. 使用Four-part name來存取資料表,例如下列程式碼範例:

     

    select *
    from [DB_Server_A].[Northwind].[dbo].[Orders]
    inner join [DB_Server_B].[Northwind].[dbo].[Order Details]
    

     


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年7月26日 23:22
  • 不好意思,现在才回复;

     因为A系统的生成的sql语句是不知道这些表是属于哪个数据库的,也不知道这些数据库的是属于哪台机器上的,例如: A系统生成一条sql语句: Select * from Test,对A系统而言,就是说我生成这条SQL语句,B系统要去执行的,只有B系统才知道这个表是属于哪个机器上的哪个个数据库,所以说按照你的意思,是B系统要做一个解析,将Test转换成 IP地址+数据库名称+Test,然后直接在B系统的数据库去执行是吧?


    小飞鱼Гìsん
    2011年8月9日 7:02
  • 是的

    请先参照MVP的说法,先加入Linked Server,再由B系统执行

    Select * from IP地址.数据库名称.dbo.Test 试试看


    Shadowと愉快なコード達
    2011年8月9日 7:07
  • 谢谢你的回复,因为数据库之间是不允许使用Linked Server来互相连接的,因为设计到安全或者保密,DB Server A和DB Server B之间不能互相暴露所有的表,因为这2个数据库是属于两个独立的系统,只能说DB Server B 所需要的数据在DB Server A的某个表中,这个是协商好的!
    小飞鱼Гìsん
    2011年8月9日 7:10
  • 谢谢你的回复,因为数据库之间是不允许使用Linked Server来互相连接的,因为设计到安全或者保密,DB Server A和DB Server B之间不能互相暴露所有的表,因为这2个数据库是属于两个独立的系统,只能说DB Server B 所需要的数据在DB Server A的某个表中,这个是协商好的!
    小飞鱼Гìsん

    其實建立Linked Server時可以指定要對應到遠端哪個使用者,以下圖為例你可以在DB Server A建立Linked Server並對應到DB Server B的某一個使用者,然後再限制DB Server B的使用者可以存取的Table就可以達到DB Server A只能存取特定DB Server B的某些TABLE的需求。

    PS:如果你的資訊安全政策不允許建立Linked Server,那可能得考慮使用其他資料同步的機制,例如Replication。


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年8月9日 9:01
  • 呵呵,明白了! 这个方案已经被否决了!

    不好意思,回复晚了!


    小飞鱼Гìsん
    2011年9月1日 8:16