解决SQL Service创建链接服务器出现(null) 是无效的产品名称的问题

本文详细介绍了在使用SQLServer2005/2008创建链接服务器时遇到的“消息15429”错误,并提供了两种解决方法。一种是通过修改SQL语句添加产品名称参数,另一种是在可视化界面中输入产品名称。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用SQL Service 2005/2008 创建链接服务器时,有出现过:"消息 15429,级别 16,状态 1,过程 sp_addlinkedserver,第 42 行'(null)' 是无效的产品名称。"的问题,从该错误提示上来看,主要是创建链接服务器的时候没有输入产品名称的原因。根据不同的创建方式以下分为两种解法方法,解决方法如下:

 

情况一:使用SQL语句创建链接服务器出现此问题

这是原来添加链接服务器SQL语句的第一句:

EXEC master.dbo.sp_addlinkedserver @server = N'My_LinkService', @provider=N'SQLNCLI', @datasrc=N'192.168.1.1'

我们可以看到一共传入了 server(链接服务器名称),provider(访问接口),datasrc(数据源)这三个参数和值。

由于错误提示我们的是null是无效的产品名称,所以我们必须要传入产品名称,参数名为srvproduct,值的话随便填一个好记的就可以了。最终这句SQL代码如下:

EXEC master.dbo.sp_addlinkedserver @server = N'My_LinkService', @provider=N'SQLNCLI', @datasrc=N'192.168.1.1',@srvproduct=N'mypro'

这里是完整的创建语句,仅作参考,具体参数根据自己数据库和需求更改:

/****** 对象:  LinkedServer [My_LinkService]    脚本日期: 07/14/2014 10:34:38 ******/
EXEC master.dbo.sp_addlinkedserver @server = N'My_LinkService', @provider=N'SQLNCLI', @datasrc=N'192.168.1.1',@srvproduct=N'mypro'
 /* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'My_LinkService',@useself=N'False',@locallogin=NULL,@rmtuser=N'sa',@rmtpassword='123456'

GO
EXEC master.dbo.sp_serveroption @server=N'My_LinkService', @optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'My_LinkService', @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'My_LinkService', @optname=N'dist', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'My_LinkService', @optname=N'pub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'My_LinkService', @optname=N'rpc', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'My_LinkService', @optname=N'rpc out', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'My_LinkService', @optname=N'sub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'My_LinkService', @optname=N'connect timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'My_LinkService', @optname=N'collation name', @optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=N'My_LinkService', @optname=N'lazy schema validation', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'My_LinkService', @optname=N'query timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'My_LinkService', @optname=N'use remote collation', @optvalue=N'true'

 

情况二:使用SQL Service可视化界面新建链接服务器出现此问题

如果是使用可视化视图界面进行链接服务器添加的话,只要在添加界面输入产品名称即可。如下图:


作者:十有三

出处:https://shiyousan.com/post/635408773769286544

版权声明:本文采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。欢迎转载本文,转载请声明出处或保留此段声明。

<think>好的,我现在需要解决用户遇到的SQL Server错误7303,即Microsoft.ACE.OLEDB.12.0初始化失败的问题。用户已经提供了一些相关的引用内容,我需要结合这些信息来找出解决方案。 首先,用户提到的错误通常发生在SQL Server尝试通过OLE DB访问Excel文件时,但无法正确初始化提供程序。根据引用[1]和[3],问题可能出在缺少正确的驱动程序或配置上。引用[2]中的连接字符串示例显示使用了不同的ACE.OLEDB版本,可能版本不兼容也是一个因素。引用[4]中的解决方案提到了启用Ad Hoc Distributed Queries和设置OLEDB属性,这可能是关键步骤。 接下来,我需要整理可能的解决步骤。首先,检查是否安装了Microsoft Access Database Engine。如果未安装,用户需要下载并安装相应版本,特别是64位系统可能需要64位的驱动程序。同时,安装时可能需要以管理员权限运行,并关闭其他Office程序,避免冲突。 然后,检查SQL Server的配置,如是否启用了Ad Hoc Distributed Queries,以及是否通过存储过程设置了OLEDB提供程序的属性。引用[4]中的T-SQL脚本提供了具体的执行步骤,这需要用户以管理员身份运行这些命令。 另外,连接字符串的正确性也很重要。确保在连接字符串中使用的Provider名称与安装的版本一致,比如12.0或16.0。同时,权限问题也不容忽视,需要确保SQL Server服务账户有权限访问Excel文件和安装目录。 如果以上步骤都无效,可能需要重新注册DLL文件或检查系统位数是否一致。最后,作为替代方案,可以建议用户先将Excel文件另存为CSV格式,再导入,以避免OLE DB的问题。 在整理这些步骤时,需要确保逻辑清晰,逐步引导用户排查问题,并引用提供的参考资料来支持每个解决方案的步骤。</think>### 解决SQL Server错误7303: Microsoft.ACE.OLEDB.12.0初始化失败 #### 问题原因分析 该错误通常由以下原因导致: 1. **未安装或未正确注册Microsoft Access Database Engine**:SQL Server通过OLE DB访问Excel时需要依赖此组件[^1][^2]。 2. **权限配置不当**:SQL Server服务账户缺少访问Excel文件或组件的权限。 3. **系统位数不匹配**:32位/64位组件与SQL Server版本冲突[^3]。 4. **未启用分布式查询配置**:未开启Ad Hoc Distributed Queries或OLEDB参数[^4]。 --- ### 分步解决方案 #### 步骤1: 安装Microsoft Access Database Engine 1. **下载对应版本** - 若SQL Server是**64位**,下载[64位版本](https://www.microsoft.com/en-us/download/details.aspx?id=54920) - 若SQL Server是**32位**,下载[32位版本](https://www.microsoft.com/en-US/download/details.aspx?id=13255) **注意**:安装时需关闭所有Office程序,并以管理员权限运行安装包。 2. **修复安装冲突** 若已安装Office 2010+,可能需先卸载旧版组件,再安装新版。 --- #### 步骤2: 配置SQL Server权限 1. **设置服务账户权限** 确保SQL Server服务账户(默认`NT Service\MSSQLSERVER`)对以下路径有读取权限: - Excel文件所在目录 - ACE驱动安装目录(默认`C:\Program Files\Microsoft Office\root\Office16`或`C:\Program Files (x86)\Microsoft Office\root\Office16`) 2. **启用进程内访问** 执行以下T-SQL命令(需管理员权限): ```sql 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; ``` --- #### 步骤3: 启用分布式查询配置 执行以下命令开启高级配置: ```sql -- 开启Ad Hoc Distributed Queries EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE; ``` --- #### 步骤4: 验证连接字符串 确保连接字符串格式正确(注意版本号需与安装的ACE驱动一致): ```csharp -- 示例:使用ACE.OLEDB.16.0 string connStr = "Provider=Microsoft.ACE.OLEDB.16.0;Data Source=C:\data.xlsx;Extended Properties='Excel 12.0;HDR=YES';"; ``` --- #### 步骤5: 注册DLL文件(可选) 若仍报错,手动注册`ACEOLEDB.DLL`: ```cmd cd "C:\Program Files\Microsoft Office\root\Office16\" regsvr32 ACEOLEDB.DLL ``` --- #### 替代方案:改用CSV导入 若持续失败,可将Excel文件另存为CSV,使用SQL Server导入向导直接导入。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值