SQL:使用C#从两个不同的服务器加入

时间:2017-03-11 14:21:25

标签: c# asp.net sql-server

问题在于: 使用ASP.NET平台,我在两个不同的服务器上有两个SQL表(SQL 2016和SQL 2005),我想在C#代码后面返回一个JSON对象。

服务器A上的表1(SQL 2005)包含可以检出的所有平板电脑的所有信息(大部分数据)

我在服务器B(SQL 2016)上的表2中所需要的只是条形码,以及告诉我平板电脑是否已经签出的布尔字段。

使问题复杂化的是我正在使用服务器端分页,主要是在SQL 2005端。所以在某些时候,这将成为服务器B数据拉动的一部分:

SELECT * FROM ( SELECT ROW_NUMBER() OVER(ORDER BY ID_EXAMPLE) AS NUMBER, ..... ) AS TBL WHERE NUMBER BETWEEN ((@PageNumber - 1) * @RowspPage + 1) AND (@PageNumber * @RowspPage) ORDER BY ID_EXAMPLE

两个表之间的链接是条形码。

因此:

Table 1 (Server A) | BARCODE | LAH | DI | DOO | DAH | |---------|-----|----|-----|-----| | 0000001 | foo | 1 | A | No | | 000001A | bar | 1 | A | Yes | | 0000002 | mit | 2 | S | Yes | | 0000003 | zva | 1 | A | Yes | . . .

Table 2 (Server B) | BARCODE | CheckOut | Beep | BeepBeep | |---------|----------|------|----------| | 0000001 | True | 11 | 3/2/2017 | | 0000002 | False | 12 | 3/1/2017 | | 0000003 | True | 14 | 3/7/2017 | . . .

我要返回的是来自表1(服务器A)的BARCODE,LAH和DOO以及来自表2(服务器B)的CheckOut,在BARCODE处有一个连接,其中CheckOut等于' True'。

我对这个问题有两点看法: 一种是在其中一台服务器上创建一个临时表,添加CheckOut列,然后以这种方式形成JSON对象。这是一个快速而肮脏的解决方案。过了一会儿,我觉得这变得很浪费。

第二个想法是在C#中使用LIST类。因为我正在返回一个LIST对象,所以肯定有一种方法可以将CheckOut列添加到LIST。

社区是否有关于此的想法?

1 个答案:

答案 0 :(得分:0)

最终成为了答案:

在服务器A上,为服务器B创建一个链接服务器对象。然后,只创建一个SELECT语句。最常见的形式是:

SELECT Table1.BARCODE, Table1.LAH, Table1.DAH, r.CheckOut FROM Table1 LEFT OUTER JOIN [Server B].database.dbo.Table2 AS r ON Table1.BARCODE = r.BARCODE WHERE r.CheckOut = 'True'