标签: linked-server

将数据从一个服务器插入到另一个服

如果我想在SQL Server中运行此类查询,如何从一个连接到另一个服务器的服务器执行相同的查询?

我尝试添加"[ServerName1]." 在"[DatabaseName1].[dbo] ..."和"[ServerName2]."之前.在"[DatabaseName2].[dbo] ..."之前,但这似乎不起作用.

INSERT INTO [DatabaseName1].[dbo].[TableName]
           ([FieldName])
     SELECT [FieldName] FROM [DatabaseName2].[dbo].[TableName]
Run Code Online (Sandbox Code Playgroud)

这可能吗?

sql sql-server linked-server

7
推荐指数
2
解决办法
4万
查看次数

从SQL Server 2008链接服务器检索> 901行到Active Directory

在SQL Server 2008(版本10.0.4000)中,我已经创建了一个到Active Directory服务器的链接服务器.

这个查询:

select  TOP 901 *
from  openquery(adsisca, '
select  givenName,
                sn,
                sAMAccountName          
from    ''LDAP://10.1.2.3:389''
where   objectCategory = ''Person''
        and
        objectClass = ''InetOrgPerson''
')
Run Code Online (Sandbox Code Playgroud)

作品.

但是,更改查询并尝试检索902行不会:

select  TOP 902 *
    from  openquery(adsisca, '
    select  givenName,
                    sn,
                    sAMAccountName          
    from    ''LDAP://10.1.2.3:389''
    where   objectCategory = ''Person''
            and
            objectClass = ''InetOrgPerson''
    ')
Run Code Online (Sandbox Code Playgroud)

错误是:

消息7330,级别16,状态2,行1无法从OLE DB提供程序"ADSDSOObject"获取链接服务器"adsisca"的行.

我发现其他人在论坛上讨论相同的问题,他们从来没有修复它,只是围着它编写多个视图并将它们联合在一起.

是否有一个更优雅的修复,是否有一个设置,我可以在某处更改以检索超过901行?

linked-server active-directory sql-server-2008

7
推荐指数
2
解决办法
3万
查看次数

查看链接服务器依赖项sql server 2008

是否有可能知道如何/是否可以查看依赖于Sql Server 2008中链接服务器的所有表/视图/存储过程.基本上好像链接服务器可以访问上下文菜单"查看依赖关系"?

任何帮助非常感谢.

谢谢

sql-server dependencies linked-server

7
推荐指数
2
解决办法
1万
查看次数

从链接服务器插入存储过程的结果

是否可以将远程存储过程的结果插入临时表?例如

CREATE TABLE #test(id INT)
INSERT INTO #test 
EXEC [linkedserver].remoteDB.dbo.tst
DROP TABLE #test
Run Code Online (Sandbox Code Playgroud)

其中tst是返回ID的存储过程.

如果我自己运行exec它工作正常

EXEC [linkedserver].remoteDB.dbo.tst
Run Code Online (Sandbox Code Playgroud)

但是当我把它作为插入的一部分时,我得到了这个错误

" OLE DB提供程序"SQLNCLI"用于链接服务器"linkedserver"返回消息"伙伴事务管理器已禁用其对远程/网络事务的支持.".消息7391,级别16,状态2,行2无法执行操作,因为链接服务器"linkedserver"的OLE DB提供程序"SQLNCLI"无法启动分布式事务. "

一台机器运行SQL Server 2005,另一台机器运行"分布式事务协调器"服务.

sql-server linked-server sql-server-2008

7
推荐指数
1
解决办法
6108
查看次数

如何在链接的服务器表中插入一行?

我有一台服务器SourceServer我连接到它有一个链接服务器TargetServer.

插入语句应该如何(我需要引用链接服务器,数据库,命名空间,表):

//Connected to [SourceServer]

USE [SourceDatabase]

DECLARE @HelloWorld NVARCHAR(255)

SELECT @HelloWorld = Name From dbo.Names where Id = 1

INSERT INTO [TargetServer].[TestDatabase].dbo.TestTable (Name)   VALUES (@HelloWorld)
Run Code Online (Sandbox Code Playgroud)

此语句以异常执行:

Too many prefixes.
Run Code Online (Sandbox Code Playgroud)

更新:上面的语法工作正常,问题是用于连接到链接服务器的sql用户的密码过期:)

sql-server insert linked-server

7
推荐指数
1
解决办法
4万
查看次数

链接服务器插入 - 选择性能

假设我的本地表有一个表Local_Table,我有另一个服务器和另一个数据库和表,这是Remote_Table(表结构是相同的).

Local_Table有数据,Remote_Table没有.我想从数据传输Local_TableRemote_Table与此查询:

Insert into RemoteServer.RemoteDb..Remote_Table
select * from Local_Table (nolock)
Run Code Online (Sandbox Code Playgroud)

但表现相当缓慢.

但是,当我使用SQL Server导入导出向导时,传输速度非常快.

我究竟做错了什么?为什么使用Import-Export向导会很快,而使用insert-select语句会很慢?有任何想法吗?

sql-server linked-server sql-server-2008

7
推荐指数
2
解决办法
1万
查看次数

我可以加入来自2个不同DB2数据库的数据吗?(与SQL Server链接数据库一样)

我正在增强现有的Java应用程序.2个不同的DB2数据库中有数据.该应用程序已经从2个不同的数据库中获取数据,但它始终从一个数据库进行查找,然后执行另一个 有没有办法使用一个SQL SELECT连接来自2个不同DB2数据库的数据?

这是我试过的:

CREATE ALIAS remote_orders FOR remote_db.schema.orders;

select *
from myid.remote_orders a
inner join local_schema.parts b on (a.key = b.key)
with ur FETCH FIRST 200 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

STATEMENT REFERENCE TO REMOTE OBJECT IS INVALID. SQLCODE=-512, SQLSTATE=56023, DRIVER=4.14.113
Run Code Online (Sandbox Code Playgroud)

我可以用临时表做点什么吗?我可以运行这个选择没有错误,但它对我没有帮助......(还)

select *
from myid.remote_orders
with ur FETCH FIRST 200 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)

编辑:

一个DB2临时表可能会有所帮助.我能够创造一个.现在我需要(去睡觉)并尝试选择它然后做我的加入.

sql db2 linked-server

7
推荐指数
1
解决办法
1万
查看次数

如何查找可用于 SQL Server 的 OLE 提供程序?

我尝试访问 SSMS 中的 Excel 文件。在互联网上搜索后,我无法让它工作。
这是我所做的:

我的环境:

Windows 7(64bit) SP 1, 
Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64)   
Office 2010 Pro Plus with Access installed(32 bit)
Run Code Online (Sandbox Code Playgroud)
  1. 尝试更改 OLE 的配置,例如:

    exec sp_configure 'Advanced', 1
    RECONFIGURE
    
    exec sp_configure 'Ad Hoc Distributed Queries', 1
    RECONFIGURE
    
    EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1  
    EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
    
    Run Code Online (Sandbox Code Playgroud)
  2. 运行查询:

    SELECT * FROM OPENROWSET('MICROSOFT.ACE.OLEDB.12.0','Text;Database=C:\Temp\;','SELECT * FROM [test.csv]')
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    SELECT * FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Text;Database=C:\Temp\;','SELECT * FROM [test.csv]')
    
    Run Code Online (Sandbox Code Playgroud)

对于这两种情况,我都收到了一条错误消息,例如:

Msg 7308, Level 16, State 1, Line 1
OLE DB …
Run Code Online (Sandbox Code Playgroud)

sql t-sql oledb linked-server sql-server-2008

7
推荐指数
1
解决办法
4万
查看次数

在链接服务器上执行SP并将其放在临时表中

需要一些关于以下问题的帮助:

案例1:存储过程在服务器1上 - 来自server1的调用

declare @tempCountry table (countryname char(50))
insert into @tempCountry
    exec [database1_server1].[dbo].[getcountrylist]
Select * from @tempCountry
Run Code Online (Sandbox Code Playgroud)

结果:成功执行

案例2:如果使用链接服务器从不同的服务器调用相同的存储过程,如下所示:

declare @tempCountry table (countryname char(50))
insert into @tempCountry
    exec [database2_server2].[database1_server1].[dbo].[getcountrylist]
Select * from @tempCountry
Run Code Online (Sandbox Code Playgroud)

结果

消息7391,级别16,状态2,行2
无法执行操作,因为linkedserver"Server2_Database2"的OLEDB提供程序"SQLNCLI"无法启动分布式事务.

案例3

但是当试图单独执行存储过程[没有临时表插入]如下所示

exec [database2_server2].[database1_server1].[dbo].[getcountrylist]
Run Code Online (Sandbox Code Playgroud)

结果:正在执行存储过程而没有任何错误并返回数据.


我忘了提到我正在使用SQL Server 2005.根据服务器管理员的说法,我建议使用的功能在2005年不可用.

sql-server stored-procedures linked-server

7
推荐指数
1
解决办法
3万
查看次数

sql server和mysql之间链接服务器上的分布式事务

我有一张Table1关于SQL Server 2014和MySQL 的表.

Table1
ID INT,Code VARCHAR(100)
Run Code Online (Sandbox Code Playgroud)

MyLinkedServer使用"Microsoft OLEDB Provider for ODBC"在SQL Server中创建了一个链接服务器.

**链接服务器**

EXEC master.dbo.sp_addlinkedserver @server = N'MyLinkedServer', @srvproduct=N'MyLinkedServer', @provider=N'MSDASQL', @datasrc=N'MyLinkedServer'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'MyLinkedServer',@useself=N'False',@locallogin=NULL,@rmtuser=N'username',@rmtpassword='########'
Run Code Online (Sandbox Code Playgroud)

链接服务器设置

EXEC master.dbo.sp_serveroption @server=N'MyLinkedServer', @optname=N'data access', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'MyLinkedServer', @optname=N'use remote collation', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'MyLinkedServer', @optname=N'remote proc transaction promotion', @optvalue=N'true'
Run Code Online (Sandbox Code Playgroud)

链接服务器已成功创建,我可以在SQL Server中查询Mysql表.

询问

我跑的时候

INSERT INTO MyLinkedServer...Table1(ID,Code) SELECT 1,'Code1'
Run Code Online (Sandbox Code Playgroud)

记录已插入.但是,当我启动一个事务并运行时INSERT,我收到一个错误:

BEGIN TRAN
INSERT INTO MyLinkedServer...Table1(ID,Code) SELECT 1,'Code1'
COMMIT
Run Code Online (Sandbox Code Playgroud)

错误:

链接服务器"MyLinkedServer"的OLE DB提供程序"MSDASQL"返回消息"[MySQL] [ODBC 5.3(a)驱动程序]不支持可选功能".消息7391,级别16,状态2,行8无法执行操作,因为链接服务器"MyLinkedServer"的OLE DB提供程序"MSDASQL"无法启动分布式事务.

到目前为止我尝试过的.

  1. 在MSDTC中启用XA事务 …

mysql sql-server linked-server distributed-transactions

7
推荐指数
1
解决办法
7153
查看次数