【问题标题】:SQL Server: connect to another instanceSQL Server:连接到另一个实例
【发布时间】:2013-05-30 11:37:20
【问题描述】:

我有一个关于 SQL Server 的问题。我有一个存储过程,它应该访问另一个 SQL Server 以将数据复制到另一个服务器。

这可能吗?如果是:我该怎么做?

我找不到一些样本。

我使用 SQL Server 2008 R2

【问题讨论】:

标签: sql sql-server database stored-procedures sql-server-2008-r2


【解决方案1】:

这是一个例子......

连接到第一台服务器,然后运行这个脚本

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

结果应该是这样的

如果两台服务器位于同一个域中且具有相同的安全设置,则一切都应该可以正常工作而无需进行任何进一步的更改。如果没有,请查看 Server Objects - Linked Servers - LINKTOB 下的 Management Studio。打开 LINKTOB 的属性并查看 Security-选项卡。

【讨论】:

    【解决方案2】:

    TheQ 的答案应该是您的首选。

    对于特定的 MSSQL 到 MSSQL 连接要求,OpenDataSource 是一个不错的选择。 例如查询外部表:

    SELECT *
    FROM OPENDATASOURCE('SQLNCLI',
    'Data Source=London\Payroll;Integrated Security=SSPI')
    .AdventureWorks2012.HumanResources.Employee
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      相关资源
      最近更新 更多