SQL Server 2012调用sp_OACreate创建对象失败求助
SQL Server 2012 SP4-GDR中sp_OACreate创建MSXML2.XMLHTTP对象返回错误0x00FEFEFE的排查方向
针对你遇到的问题,以下是具体的排查方向:
1. 检查MSXML组件的可用性与版本
- 确认服务器系统中已正确安装并注册MSXML组件:SQL Server调用的是系统级COM组件,若组件缺失或损坏会导致创建失败。可在服务器命令行执行对应版本的注册命令,例如
regsvr32 msxml3.dll(对应MSXML3版本),重新注册组件。 - 尝试使用更具体的ProgID,比如
MSXML2.XMLHTTP.3.0或MSXML2.XMLHTTP.6.0,避免版本歧义导致的匹配问题。
2. 验证SQL Server服务账户权限
- SQL Server服务运行账户可能缺少访问COM组件或读取对应注册表项的权限:
- 临时将服务账户加入本地管理员组(测试环境),验证是否是权限问题;
- 检查注册表
HKEY_CLASSES_ROOT\MSXML2.XMLHTTP的权限设置,确保SQL服务账户拥有读取权限。
3. 获取OLE自动化详细错误信息
当前脚本仅检查了返回对象值,未捕获具体错误描述。修改脚本调用sp_OAGetErrorInfo获取更详细的错误信息:
USE master DECLARE @hr int DECLARE @Object AS INT; DECLARE @Source nvarchar(255), @Description nvarchar(255); EXEC @hr = sp_OACreate 'MSXML2.XMLHTTP', @Object OUT; IF @hr <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object, @Source OUT, @Description OUT; SELECT 'OLE Error', @hr AS ErrorCode, @Source AS ErrorSource, @Description AS ErrorDescription; END ELSE BEGIN SELECT 'sp_OACreate success', @object; EXEC sp_OADestroy @Object; END
4. 排查SQL Server安全限制
- 确认服务器外围应用配置中OLE自动化已启用:通过SSMS进入服务器属性→高级→外围应用配置,检查OLE自动化状态;
- 排查第三方安全软件(杀毒软件、防火墙)是否拦截了SQL Server访问COM组件的操作,可临时关闭测试(生产环境需谨慎)。
5. 尝试替代HTTP组件
若MSXML组件问题无法解决,可尝试使用Microsoft.XMLHTTP等其他HTTP请求COM组件,验证是否能正常创建对象。
内容的提问来源于stack exchange,提问作者Jim L
相关产品推荐
相关产品推荐

