标签: linked-server

使用链接服务器查询时插入数据时出错

更新:问题是col1是hiereachyid类型,甚至一个选择没有工作.

大家好,

我收到此错误 -

在分布式查询中不允许使用CLR类型公开列的对象.请使用传递查询来访问远程对象"RemoteDb"."dbo"."RemoteTable"'.

我已经设置了链接服务器[RemoteServer.dev.com].我试图从远程表执行批量插入到当前表中这样的事情 -

INSERT INTO [CurrentDb].[dbo].[Mytable]
     (
       col1,
       col2
      )
 SELECT
  col1,col2
 FROM [RemoteServer.dev.com].[RemoteDb].[dbo].[RemoteTable]
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮帮我..谢谢.

sql-server insert linked-server

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

尝试调用T-SQL存储过程,该过程从SSIS包中的链接服务器中选择数据

我有一个场景,我试图从远程服务器(我刚读取权限)中选择表t1和t2中的一些数据来自另一个远程服务器的数据库db1中的S1(我是DBO,但实际上并不是全部)权限,以便我可以做任何我想做的事情)S2在DB db2中通过SSIS包进入表t1.

S1和S2都是链接服务器.我从S2链接到S2通过SSMS中的对象服务器.

现在,我在S2.db2中创建了一个存储过程sp1,它包含来自两个不同表的一些select语句,以及一系列日期的连接,这些日期作为参数传递给sp1.

SP的输入参数

例如如下:

SELECT*from s1.db1.schema1.t1 LEFT JOIN s1.db1.schema1.t2 ON [CONDITION] WHERE [CONDITIONS]现在我的SSIS包有一个Dataflow任务,它有OLE DB源和Destination,连接字符串为s2.db2

在源代码中我直接在SQL命令中调用上面提到的查询并填充到目标表中,即S2.db2.t1,它工作正常

直接传递查询

但是当我尝试执行以下操作时,它会抛出错误

  1. 将2个包级别的DATETIME变量创建为v1,v2并传递默认值 - 无问题
  2. 在OLE DB SOURCE-> CONNECTION STRING - > SQL COMMAND - > EXEC sp1?中,?- 没问题
  3. 单击PARAMETERS选项卡并选择Para​​meter0和parameter1的用户参数 - 没问题
  4. 现在,当我说SQL命令窗口正常时,它给出了如下错误

调用SP时出错

错误是:

标题:Microsoft Visual Studio

FII54_CBI_TM51 [FII54_CBI 1 ]出错:SSIS错误代码DTS_E_OLEDBERROR.发生OLE DB错误.错误代码:0x80004005.OLE DB记录可用.来源:"Microsoft SQL Server Native Client 10.0"Hresult:0x80004005描述:"操作数类型冲突:int与日期不兼容".

FII54_CBI_TM51 [FII54_CBI 1 ] 出错:无法从数据源检索列信息.确保数据库中的目标表可用.


附加信息:

来自HRESULT的异常:0xC020204A(Microsoft.SqlServer.DTSPipelineWrap)


纽扣:

我理解错误的意思,但我不明白为什么它会抛出这个错误.

如果有人能帮我解决这个问题,我感激不尽?这对我来说非常紧迫.

sql-server ssis stored-procedures linked-server

10
推荐指数
1
解决办法
4134
查看次数

试图从链接服务器中选择的灾难性故障

我已经从SQL SERVER 2012创建了与Pervasive SQL的链接oledb/odbc连接:

USE [master]
GO

/****** Object:  LinkedServer [KSLAP208]    Script Date: 2/8/2013 10:38:55 AM ******/
EXEC master.dbo.sp_addlinkedserver @server = N'KSLAP208', @srvproduct=N'Pervasive ODBC Interface', @provider=N'MSDASQL', @datasrc=N'C003', @location=N'localhost'
 /* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'KSLAP208',@useself=N'False',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL

GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'collation compatible', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'data access', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'dist', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'pub', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'rpc', @optvalue=N'false'
GO

EXEC …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server linked-server sql-server-2012

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

链接服务器性能和选项

在工作中,我们有两个服务器,一个运行很多人使用的应用程序,它有一个SQL Server 2000后端.我可以自由地查询这个很长一段时间但不能添加任何东西,如存储过程或额外的表.

这导致我们将第二个SQL Server链接到第一个SQL Server,然后构建一个存储过程库,使用链接服务器从双方查询数据.其中一些查询花费的时间比我想要的要长.

有人能指点我一些关于使用链接服务器的好文章吗?我特别感兴趣的是找出两者之间正在传输的数据,因为通常大多数sql语句都可以远程执行但我觉得它可能正在转移整个表,它通常只是一个小的最终的连接本地表.

此外,我目前拥有的链接服务器选项是什么:

  • 整理兼容真实
  • 数据访问真实
  • Rpc True
  • Rpc Out True
  • 使用远程整理错误
  • 整理名称(空白)
  • 连接超时0
  • 查询超时0

编辑:

只是想我会更新这篇文章我使用动态参数的openqueries一段时间以提高性能,感谢提示.但是,当你最终处理字符串时,这样做可能会使查询更加混乱.最后,今年夏天我们将SQL Server升级到2008并实现了实时数据镜像.说实话,开放查询接近我的任务的本地查询的速度,但镜像肯定使sql更容易处理.

sql-server-2000 linked-server

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

添加链接的SQL服务器时遇到问题

我正在尝试从远程SQL Server中提取数据.我可以使用SQL身份验证访问远程服务器; 我没有运气使用与sp_addlinkedserver相同的凭据.

我正在尝试这样的事情:

Exec sp_dropserver 'Remote', 'droplogins'
go

EXEC sp_addlinkedserver   
   @server='Remote', 
   @srvproduct='',
   @provider='SQLNCLI', 
   @datasrc='0.0.0.0'

EXEC sp_addlinkedsrvlogin
    @useself='FALSE',
    @rmtsrvname='Remote',
    @rmtuser='User',
    @rmtpassword='Secret'

Select Top 10 * from Remote.DatabaseName.dbo.TableName
Run Code Online (Sandbox Code Playgroud)

这是我得到的:


OLE DB provider "SQLNCLI" for linked server "Remote" returned message 
"Login timeout expired".

OLE DB provider "SQLNCLI" for linked server "Remote" returned message 
"An error has occurred while establishing a connection to the server. 
When connecting to SQL Server 2005, this failure may be caused by the 
fact that under the default …

sql-server linked-server

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

如何从sql语句或存储过程连接到外部数据库?

在数据库上运行SQL语句或存储过程时,是否可以连接到外部数据库并从中提取数据?

就像是:

SELECT a.UserID, b.DataIWantToGet 
  FROM mydb.Users as a, externaldb.Data as b
Run Code Online (Sandbox Code Playgroud)

sql t-sql database sql-server linked-server

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

SQL Server 2012:向PostgreSQL添加链接服务器

我尝试将PostgreSQL连接到SQL Server 2012服务器作为链接服务器

我在不同的论坛上找到了一些建议并遵循它.但我遇到了身份验证问题.

我解释:

在SQL Server上,我已经安装了PostgreSQL的ODBC驱动程序(psqlodbc_09_02_0100-x64).我在PostgreSQL上为特定数据库创建了一个系统DSN.此DSN正常工作.

使用SSMS,我运行此命令来添加链接服务器:

EXEC master.dbo.sp_addlinkedserver 
@server = N'lnk_test', 
@srvproduct=N'PostgreSQL Unicode(x64)', 
@provider=N'MSDASQL', 
@provstr=N'Driver=PostgreSQL Unicode(x64);uid=postgres;Server=test1;database=accueil;pwd=MyPassword;SSLmode=disable;PORT=5432'

EXEC master.dbo.sp_addlinkedsrvlogin 
@rmtsrvname=N'lnk_test',
@useself=N'True',
@locallogin=NULL,
@rmtuser=NULL,
@rmtpassword=NULL
Run Code Online (Sandbox Code Playgroud)

运行后,我有一个名为"lnk_test"的新链接服务器.当我收到以下错误消息时:

Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked server "pgTest1_accueil".
OLE DB provider "MSDASQL" for linked server "pgTest1_accueil" returned message "[Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed".
OLE DB provider "MSDASQL" for linked server "pgTest1_accueil" returned message "FATAL: authentification par mot de passe échouée pour l'utilisateur  « postgres »". (Microsoft …
Run Code Online (Sandbox Code Playgroud)

sql sql-server postgresql linked-server sql-server-2012

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

SQL Server和Sybase链接服务器问题

在使用Sybase 12.5驱动程序的SQL Server 2008中,一切正常,但现在我们已经使用64位驱动程序迁移到SQL Server 2012和Sybase 15,似乎事情已经破裂.

如果我测试链接服务器连接它给我链接服务器成功的消息但是当我在视觉上深入查看目录虽然它列出了所有这些目录,但它们显示为空白如此

在此输入图像描述

但项目计数是正确的,因为我们在Sybase中有许多目录.我认识到的另一个有趣的事情是,当我执行和OPENQUERY时,它给了我正确的行数,但仍显示空字符串,如此

在此输入图像描述

我不知道这里发生了什么,我唯一的线索是当我在这些空白数据库中深入查看时出现此错误消息.此异常提示.

在此输入图像描述

Failed to retrieve data for this request. (Microsoft.SqlServer.Management.Sdk.Sfc)

------------------------------
ADDITIONAL INFORMATION:

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

------------------------------

Cannot obtain the schema rowset "DBSCHEMA_TABLES" for OLE DB provider "MSDASQL" for linked server "TEST". The provider supports the interface, but returns a failure code when it is used. (Microsoft SQL Server, Error: 7311)
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会这样?有谁知道解决这个问题?

sql-server linked-server sybase-ase sql-server-2012

9
推荐指数
1
解决办法
2885
查看次数

Azure SQL表 - > SQL Server视图 - >链接访问表:无法更新

所以我有这个可爱的菊花链:

  • Azure SQL数据库中的表(tblAzure)
  • 本地SQL Server数据库中的tblAzure视图(vwSQL)
  • Access中的链接表指向vwSQL(tblAccess)

虽然部分单独工作,但我无法从Access更新Azure表.

数据库之间的连接可以单独正常工作.我可以通过在vwSQL中插入值来更新tblAzure.我还可以通过链接的Access表更新SQL服务器中的表,甚至可以通过创建视图并将Access链接到该视图来更新表.我还可以通过在Access中打开的vwSQL看到tblAzure中的值作为链接表.

当我尝试更新或附加链接视图时,这是我得到的错误:

ODBC - 在链接表'tblAccess'上插入失败.

[Microsoft] [ODBC SQL Server驱动程序] [SQL Server] OLE DB提供程序"SQLNCLI11"链接服务器"azw"返回消息"参数不正确:.".(#7412)
[Microsoft] [ODBC SQL Server驱动程序] [ SQL Server]链接服务器"azw"的OLE DB提供程序"SQLNCLI11"报告错误.提供者报告一个或多个参数无效.(#7399)
[Microsoft] [ODBC SQL Server驱动程序] [SQL Server]无法执行此操作,因为链接服务器"azw"的OLE DB提供程序"SQLNCLI11"无法启动分布式事务.(#7391)

有人见过这样的事吗?我尝试将链接属性/服务器选项/分发服务器更改为True,但没有帮助.

基本思想是我需要一个在我们的数据库中完全同步的表,以及可由Access中的用户编辑的表.(不要问,我继承了太复杂的系统......)


测试脚本

在Azure中:

CREATE TABLE [dbo].[AzureTable](
    [AzureTableID] [int] NOT NULL,
    [SomeText] [nvarchar](50) NULL,
 CONSTRAINT [PK_AzureTable] PRIMARY KEY CLUSTERED ([AzureTableID] ASC)
 WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
GO

INSERT dbo.AzureTable VALUES (1, N'Hello')
Run Code Online (Sandbox Code Playgroud)

在SQL …

sql-server ms-access database-connection linked-server azure-sql-database

9
推荐指数
1
解决办法
834
查看次数

OPENROWSET或OPENDATASOURCE从远程服务器的文件系统上的.xlsx或.csv文件获取数据的示例

有很多示例可以展示如何使用OPENROWSETOPENDATASOURCE来打开远程SQL服务器上的表的查询,以及从其他服务器上的文件中获取数据.不幸的是,他们都没有告诉我如何做我需要做的具体事情,这是使用其中一个命令从远程服务器获取.csv或.xlsx Excel文件使用服务器IP地址和Windows登录服务器没有安装SQL Server实例 - 只有IIS7或8.

如果Microsoft文档没有省略如何以最可能的方式使用他们的工具的基本示例,那将是很好的.尝试40多种不同的参数组合列表并不是真正的智慧:它只是浪费时间的低效率.开发人员有更多重要的事情要做,而不是浪费时间试图发现一些"秘密知识"配方,这些配方实际上只是一个没有正确记录的命令参数变体,并假装这与聪明的事情有关.

因此,为了减轻我的哲学焦虑,有人可以提供一个示例,说明如何使用OPENROWSET或OPENDATASOURCE从.csv文件或使用远程服务器IP地址XXX.XXX.XXX.XXX的Excel电子表格中获取/选择内容,如果应包含端口号,则文件系统路径正确附加到该命令或包含在命令中,以及用户名和密码参数的正确排列.远程服务器上没有SQL服务器实例 - 只有IIS和具有Windows身份验证的网站.如果你有一个与远程服务器上的SQL服务器实例一起工作的例子,那就行了(虽然我认为一些REMOTEDATASOURCE示例已经涵盖了这一点)但我真的想要一个我不必拥有SQL服务器实例的例子在远程Web服务器上.

我知道你可以使用链接服务器,但是在包含要访问的文件的远程服务器上有一些额外的包袱,在我的情况下,包含excel或.csv文本文件的服务器甚至没有SQL Server它上面的实例 - 只有IIS和一个网站.

(另外 - 有人可以确认您是否可以使用具有所需文本数据文件的远程服务器上没有SQL Server或其他数据库服务器实例的链接服务器?它是仅链接数据库服务器,还是远程服务器可以只是一个链接服务器没有安装SQL服务器的Windows和Web服务器?)

这个例子很方便,但是不告诉我是否SERVERPROPERTY('MachineName') AS nvarchar(128)) 可以包含没有SQL服务器实例的远程Windows服务器的IP地址,它不是关于访问文本文件.

这个例子非常接近,但在帖子中似乎没有积极的结果,并且没有涉及文本文件 - 只有数据库查询所以远程系统安装了SQL服务器?:

SELECT * 
FROM OPENROWSET('PACISOleDb', '192.168.200.172';'admin';'admin', 'SELECT * FROM DB')
Run Code Online (Sandbox Code Playgroud)

现有的例子很好,但没有多大帮助:

SELECT *
FROM OPENROWSET('SQLNCLI',
   'DRIVER={SQL Server};SERVER=YourServer;UID=UserID;PWD=Password',
   'select * from sys.sysobjects')
Run Code Online (Sandbox Code Playgroud)

(来源)

SELECT ContactName, CompanyName, ContactTitle
FROM OPENDATASOURCE('SQLOLEDB',
              'Data Source=ServerName;User ID=MyUID;Password=MyPass' ).Northwind.dbo.Customers
Run Code Online (Sandbox Code Playgroud)

(来源)

-- SQL Server 2012
SELECT
    *
FROM
    OPENDATASOURCE ('SQLNCLI11', 
   'Data Source=SQLInstanceName;Catalog=DBName;User …
Run Code Online (Sandbox Code Playgroud)

sql-server csv excel linked-server openrowset

9
推荐指数
1
解决办法
7089
查看次数