LoadFromSQLServer 方法遇到了 OLE DB

Posted

技术标签:

【中文标题】LoadFromSQLServer 方法遇到了 OLE DB【英文标题】:LoadFromSQLServer method has encountered OLE DB 【发布时间】:2012-09-06 20:15:55 【问题描述】:

我有这个错误:

LoadFromSQLServer 方法遇到 OLE DB 错误代码 0x80004005(登录超时已过期)。发出的 SQL 语句失败

这是我的代码,有什么问题?

DECLARE @FileName VARCHAR(50); 
DECLARE @VendorID VARCHAR(50); 
DECLARE @sql VARCHAR(2000); 
DECLARE @Local_File_FullPath VARCHAR(100);   

SET @FileName = 'Extgt_skinny_file.txt.pgp' 
Set @VendorID = 'ET' 

Select @Local_File_FullPath = dw03_path  FROM GMAC_META.dbo.VENDOR_XFER_METADATA where vendor_id = @VendorID 

SET @sql = 'dtexec /SQL "\EMAP_FTP_XFER_CHECK" /SET \Package.Variables[User::FileName].Properties[Value];"' 
+ @FileName+'" /SET \Package.Variables[Local_File_FullPath].Properties[Value];' 
+ @Local_File_FullPath+' /SERVER "hqgmdw02/dw_dev"   /CHECKPOINTING OFF /REPORTING E'


 exec xp_cmdshell @sql 

【问题讨论】:

【参考方案1】:

尝试以下方法:

GRANT exec ON xp_cmdshell TO '<somelogin>'。请参考xp_cmdshell (Transact-SQL)。

检查您是否在 64 位机器上使用 32 位 DTExec。

确保将运行 SSIS 包的用户具有足够的权限。我认为您在 SQL Server 代理中的 SSIS 下运行,或者您可以手动运行它。运行 SQL 代理的服务帐户和您的帐户必须具有执行作业的权限。请看Error in executing SSIS package through Agent

【讨论】:

谢谢但我发现这个问题是一个非常愚蠢的错误,但错误错误地指向了权限。问题是实例的斜杠“hqgmdw02\dw_dev”不正确,并且一些引号是错误的。底线是 DTEXEC 可能会给出误导性的错误消息。因此,请关注语法,然后才是实际的错误消息。【参考方案2】:

正如 OP 所提到的,服务器路由(对于参数 /SERVER)应该使用反斜杠而不是普通斜杠。在这种情况下显示的错误有点误导,因为登录超时是因为服务器路径不正确。

所以改变

/SERVER "hqgmdw02/dw_dev"

/SERVER "hqgmdw02\dw_dev"

【讨论】:

以上是关于LoadFromSQLServer 方法遇到了 OLE DB的主要内容,如果未能解决你的问题,请参考以下文章

I/O多路复用的解决方法--select

ubuntu18.04 安装g2o_viewer,遇到的所有坑和解决方法

抛弃 LIMIT O,N ,换种方法查询分页

fromkeys方法的意外结果

在 localhost 启动 Tomcat 服务器时遇到了 p‌r‌o‌b‌l‌e‌m [重复]

编写远程 I/O 渲染回调函数时遇到问题