问题在于: 使用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。
社区是否有关于此的想法?
答案 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'