标签: linked-server

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

假设我的本地表有一个表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万
查看次数

如何查找可用于 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万
查看次数

如何创建链接服务器MySQL

是否有可能为SQL Server的链接服务器等功能创建/配置MySQL?

如果是的话,请你告诉我怎么样?我正在使用MySQL 5.5.

mysql linked-server

6
推荐指数
2
解决办法
5万
查看次数

无法使用链接服务器连接到SQL Azure

我一直在这里关注这篇文章:

http://blogs.msdn.com/b/sqlcat/archive/2011/03/08/linked-servers-to-sql-azure.aspx

如何将链接服务器从SQL Server 2008 R2设置为SQL Azure实例.我使用SQL Native Client 10.0作为ODBC驱动程序,并通过显示连接有效的默认数据库进行判断; 但是,当我尝试建立链接服务器时,如上文所述; 我收到以下错误:

用于链接服务器"Azure_Test"的OLE DB提供程序"MSDASQL"返回消息"[Microsoft] [ODBC驱动程序管理器]未找到数据源名称且未指定默认驱动程序".

现在我看到一些论坛帖子(不幸的是没有结论)表明它可能是64位问题.有没有人从本地实例成功地将链接服务器设置为SQL Azure?

编辑:戴维斯的答案确实是正确的; 只是以为我会分享这个我发现你现在可以用链接服务器做的很棒的事情:

DELETE OPENQUERY (AzureTest, 
'SELECT * FROM [AzureDB].static.MyTable');

INSERT OPENQUERY (AzureTest, 
'SELECT * FROM [AzureDB].static.MyTable')
SELECT *
FROM static.MyTable

SELECT * FROM OPENQUERY(AzureTest, 'SELECT * FROM [AzureDB].static.MyTable')
Run Code Online (Sandbox Code Playgroud)

sql oledb odbc linked-server azure

6
推荐指数
1
解决办法
4996
查看次数

有没有办法阻止SQL Server在CREATE/ALTER期间验证存储过程中的SQL

我们系统的一个方面要求我们的SQL Server实例通过链接的服务器连接与MySQL服务器通信.

MSSQL - > LinkedServer(MSDASQL ODBC提供程序) - > MySQL ODBC连接器 - > MySQL DB

链接服务器上的表在SPROC中沿着行调用

CREATE PROCEDURE DoStuff
AS

SELECT a.ID, a.Name, b.OtherProperty
FROM   MyDatabase..MyTable a
JOIN   LINKSRVR...OtherTable b
ON     a.ID = b.ID

GO
Run Code Online (Sandbox Code Playgroud)

问题是MySQL数据库位于另一个网络上,只能通过VPN访问,并且除非VPN处于活动状态,否则CREATE或ALTER语句会因以下错误而中断.

The OLE DB provider "MSDASQL" for linked server "LINKSRVR" reported an error. 
 The provider did not give any information about the error.

Cannot initialize the data source object of OLE DB provider 
"MSDASQL" for linked server "LINKSRVR".
Run Code Online (Sandbox Code Playgroud)

无论如何都要强制SQL Server继续使用我告诉它的SQL创建SPROC,而不是尝试验证LinkedServer是否已启动/关闭.

sql-server validation stored-procedures linked-server

6
推荐指数
1
解决办法
2234
查看次数

无法开始分布式事务:链接服务器 - > Access数据库

眼镜:

  • Sql Server 2008
  • Server 2008 R2 64位
  • MS Access数据库

什么有效:

  • 我通过安装Office访问数据组件并创建系统DSN等来配置到Access数据库的链接服务器连接.它驻留在同一服务器上的目录中.
  • 我已成功通过openquery查询数据.

    SELECT*FROM OPENQUERY(LINKEDHELL,'SELECT*FROM [D:\ path\mordor.mdb] .Orcs')

  • 我可以通过openquery插入/更新/删除(从Sql Management Studio内部)

什么行不通:

我创建了一个数据库,它公开了一个包含openquery表达式的视图.这允许我的应用程序不知道它通过链接服务器连接查询并允许我使用ORM的事实.例证:实体框架.

但是,在检索数据时,更新/插入/删除不会.我花了很多时间确保MSDTC配置正确,但没有骰子.

我尝试了什么

MSDTC

  • 启用网络DTC访问
  • 允许入站/出站
  • 配置防火墙
  • 启用XA事务
  • 给DTC工作的帐户访问.mdb
  • 进行这些设置后重新启动Sql Server

其他

  • 配置的链接服务器安全性:在sql用户和本地管理员帐户之间创建映射,这样当我使用该sql用户登录时,它使用本地管理员帐户连接到访问数据库.
  • 启用RPC的分布式事务升级:False

我得到的错误:

OLE DB provider "MSDASQL" for linked server "LINKEDHELL" returned message "[Microsoft][ODBC Microsoft Access Driver]Invalid attribute/option identifier ".
Msg 7391, Level 16, State 2, Line 4
The operation could not be performed because OLE DB provider "MSDASQL" for linked server "LINKEDHELL" was unable to …
Run Code Online (Sandbox Code Playgroud)

ms-access msdtc odbc linked-server sql-server-2008

6
推荐指数
1
解决办法
3219
查看次数

SQL Azure作为链接服务器 - >获取插入行的标识

我已将Azure云数据库设置为我们的"SQL server 2008 R2"服务器的链接服务器,如此帖所述:http://blogs.msdn.com/b/sqlcat/archive/2011/03/08 /linked-servers-to-sql-azure.aspx 我启用了RPC和RPC Out,因为我在某处读过.

现在问题是我无法获取刚刚插入的记录的ID.请看一下这个测试表:

CREATE TABLE dbo.TEST
(
   ID INT IDENTITY(1, 1) NOT NULL
   CONSTRAINT PK_TEST_ID PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
Run Code Online (Sandbox Code Playgroud)

我也创建了这个存储过程:

CREATE PROCEDURE test_create @ID INT OUTPUT
AS
  BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON;

      INSERT INTO TEST
      DEFAULT VALUES

      SELECT …
Run Code Online (Sandbox Code Playgroud)

linked-server azure sql-server-2008 azure-sql-database

6
推荐指数
1
解决办法
1663
查看次数

测试链接服务器中是否存在表(服务器名称是参数)

我需要测试一个表是否存在于链接服务器中,其中链接服务器是一个参数(必须是),这就是我使用exec方法的原因.我尝试了很多方法,但没有成功.

Declare @LinkedServerName varchar(50)
Declare @DS varchar(50)
Declare @username varchar(50)
Declare @pswd varchar(12)
Declare @TableExists int

Set @DS = 'test\TestDB'
Set @LinkedServerName = 'LinkedServerAutoAddDrop'
Set @username = 'ua'
Set @pswd = 'pass'
Set @TableExists = 0

if not exists(select * from sys.servers where name = @LinkedServerName)
BEGIN
    EXEC sp_addlinkedserver   
       @server=@LinkedServerName, 
       @srvproduct='',
       @provider='SQLNCLI', 
       @datasrc=@DS

    EXEC sp_addlinkedsrvlogin @LinkedServerName, N'false', NULL, @username, @pswd
    exec sp_serveroption @server=@LinkedServerName, @optname='rpc', @optvalue='TRUE'
    exec sp_serveroption @server=@LinkedServerName, @optname='rpc out', @optvalue='TRUE'
END


exec('IF (EXISTS (SELECT * FROM OPENQUERY([' + @LinkedServerName …
Run Code Online (Sandbox Code Playgroud)

sql linked-server sql-server-2008

6
推荐指数
1
解决办法
5687
查看次数

使用本地表中的数据插入链接服务器上的表

我正在使用 SQL Server Express,我创建了一个到 Oracle 数据库的链接服务器。

正如标题所示,我想将从本地表中选择的数据插入到链接服务器上的表中。

我尝试了很多查询,但没有一个能按我想要的方式工作。

我使用的下面的查询有效,但仅适用于静态值,但我想从本地数据库上的表动态插入数据。

INSERT OPENQUERY (ORTEST, 'SELECT * FROM reservation')
VALUES (2, '2', 3);
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server oracle linked-server openquery

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

从sql server链接服务器连接到Sphinx

我试图从SQL Server Management Studio连接到Sphinx作为链接服务器.我尝试了以下查询:

EXEC master.dbo.sp_addlinkedserver @server=N'SPHINX_SEARCH', @srvproduct=N'', @provider=N'MSDASQL', @provstr=N'Driver={MySQL ODBC 8.0 ANSI Driver};Server=127.0.0.1;Port=9306,charset=UTF8;User=;Password=;OPTION=3'
GO
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'SPHINX', @useself=N'False',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
GO
Run Code Online (Sandbox Code Playgroud)

我得到以下例外:

标题:Microsoft SQL Server Management Studio

与链接服务器的测试连接失败.

附加信息

链接服务器"SPHINX_SEARCH"的OLE DB提供程序"MSDASQL"报告错误.提供商未提供有关错误的任何信息.无法为链接服务器"SPHINX_SEARCH"初始化OLE DB提供程序"MSDASQL"的数据源对象.(Microsoft SQL Server,错误:7399).

从MySQL连接到Sphinx时,通过以下命令工作:

mysql -h 127.0.0.1 -P 9306
Run Code Online (Sandbox Code Playgroud)

有什么建议?


Sphinx版本:3.0.3,SQL Server版本:2014,MySQL版本:5.6

sql-server ssms sphinx linked-server sql-server-2014

6
推荐指数
1
解决办法
310
查看次数