一、概述
很多时候我们需要在.NET应用程序中使用一条SQL语句来访问来自不同服务器、不同数据库中的不同的表,实现方法有很多。我们可以在.NET应用程序中建立数据访问层,使用ADO.NET Entity Framework将我们的数据库以及数据表抽象成应用程序对象,进而在程序里使用Code来对不同库当中的表进行连接或其他的操作;也可以在数据库级别使用T-SQL脚本直接对不同数据库中的表进行查询或其他操作,前一种方式在这里不做过多介绍,今天介绍一下后一种。
先介绍一下环境,我有2个数据库服务器Server_A和Server_B
Server_A(本地)
- 数据库:AdventureWorkLT
- 数据表:SalesLT.Customer
Server_B(远程)
- 数据库:TailspinToys
- 数据表:dbo.Products
二、使用T-SQL实现
首先我们需要使用本地数据库中的系统存储过程将远程数据库的连接字符串添加到本地数据库中
exec sp_addlinkedserver 'Server_B','','SQLOLEDB','192.168.0.2'
exec sp_addlinkedsrvlogin 'Server_B','false',null,'dbUser','dbPassword'
该命令仅执行一次即可,现在我们已经将远程的Server_B服务器添加到了本地,我们可以使用如下命令来对远程的数据表进行查询或其他的操作
SELECT b.CustomerID,a.ProductID,b.LastName AS CustomerName,a.[Description] AS ProductName,a.Unit,a.RetailPrice
FROM Server_B.TailspinToys.dbo.Products as a
JOIN AdventureWorksLT.SalesLT.Customer AS b
ON a.ProductID=b.CustomerID
WHERE b.CustomerID>4