问题是:使用ASP.NET平台,我在两个不同的服务器(SQL2016和SQL2005)上有两个SQL表,并且我想在后面的C#代码上返回一个JSON对象。
服务器A上的表1 (SQL 2005)包含可结帐的所有平板电脑的所有信息(大部分数据)
在服务器B (SQL 2016)上的表2中,我只需要条形码和告诉我平板电脑是否已检出的布尔值字段。
更复杂的是,我使用的是服务器端分页,主要是在SQL2005端。因此,在某一时刻,这将是Server 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)的条形码,LAH和DOO,以及来自表2(服务器B)的CheckOut,在条形码上有一个连接,其中CheckOut等于'True‘。
对于这个问题,我有两种想法:一种是在其中一台服务器上创建一个临时表,添加CheckOut列,然后以这种方式形成JSON对象。这是一个又快又脏的解决方案。过了一段时间,我觉得这变得很浪费。
第二个想法是在C#中使用LIST类。因为我返回一个LIST对象,所以肯定有一种方法可以将CheckOut列添加到LIST中。
社区对此有什么想法吗?
发布于 2017-03-13 23:29:46
这就是答案:
在服务器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'
https://stackoverflow.com/questions/42736330
复制相似问题