我对SQL Server有疑问。我有一个存储过程应该访问另一个SQL Server以将数据复制到另一个服务器。
这可能吗?如果是:我该怎么做?
我找不到一些样品。
我使用SQL Server 2008 R2
答案 0 :(得分:4)
这是一个例子......
连接到第一台服务器,然后运行此脚本
CREATE DATABASE [DatabaseA];
GO
CREATE TABLE [DatabaseA].[dbo].[TableA] (Id int, ValueA varchar(10));
INSERT INTO [DatabaseA].[dbo].[TableA] VALUES(1,'a'),(2,'b'),(3,'c');
然后连接到第二台服务器,并运行此
CREATE DATABASE [DatabaseB];
GO
CREATE TABLE [DatabaseB].dbo.[TableB] (Id int, ValueB varchar(10));
INSERT INTO [DatabaseB].dbo.[TableB] VALUES(1,'A'),(2,'B'),(3,'B');
在与第一台服务器的连接中,我们创建了第二个这样的链接
EXEC master.dbo.sp_addlinkedserver
@server = N'LINKTOB'
,@srvproduct=N'B'
,@provider=N'SQLOLEDB'
,@datasrc=N'<NAME OF SERVER CONTAINING DatabaseB>';
请注意,您需要更改 @datasrc 的值以适合您的环境。
现在我们可以在第一台服务器上运行这样的查询,使用来自同一查询中两个独立服务器的数据
SELECT
a.Id
,a.ValueA
,b.ValueB
FROM
[DatabaseA].[dbo].[TableA] AS a
INNER JOIN [LINKTOB].[DatabaseB].[dbo].[TableB] AS b ON a.Id = b.Id
结果应如下所示
如果两个服务器在同一个域中具有相同的安全设置,则所有内容都应该无需进一步更改即可运行。如果没有,请查看服务器对象 - 链接服务器 - LINKTOB 下的 Management Studio 。打开 LINKTOB 的属性,然后查看安全标签。
答案 1 :(得分:1)
TheQ的答案应该是你的第一选择。
对于特殊的MSSQL到MSSQL连接要求,OpenDataSource是一个不错的选择。 例如,要查询外部表:
SELECT *
FROM OPENDATASOURCE('SQLNCLI',
'Data Source=London\Payroll;Integrated Security=SSPI')
.AdventureWorks2012.HumanResources.Employee