在sql server的触发器或者存储过程中访问外部ACCESS数据库,提示错误如下:
"未能为OLE DB提供程序MICROSOFT JET.OLE.4.0启动事务",请问如何解决阿?我需要往ACCESS中写入数据,只要能解决在触发器或者存储过程中访问access库就给分,最多给500分
---------------------------------------------------------------
创建链接服务器以访问 Access 数据库
执行 sp_addlinkedserver 来创建链接服务器,指定 Microsoft.Jet.OLEDB.4.0 作为 provider_name,指定 Access .mdb 数据库文件的完整路径名作为 data_source。.mdb 数据库文件必须驻留在服务器上,data_source 在服务器上而不是在客户机上进行评估,路径必须是服务器上的有效路径。
例如,若要创建一个名为 Nwind 的链接服务器,对 C:\Mydata directory 目录中名为 Nwind.mdb 的 Access 数据库进行操作,请执行:
sp_addlinkedserver 'Nwind', 'Access 97', 'Microsoft.Jet.OLEDB.4.0',
'c:\mydata\Nwind.mdb'
为访问非保密的 Access 数据库,试图访问 Access 数据库的 SQL Server 登录应该有一个为用户名 Admin 定义的没有密码的登录映射。
下例使得本地用户 Joe 可以访问名为 Nwind 的链接服务器。
sp_addlinkedsrvlogin 'Nwind', false, 'Joe', 'Admin', NULL
要访问保密的 Access 数据库,需使用注册表编辑器配置注册表,以便使用 Access 所用的正确的工作组信息文件。使用注册表编辑器向该注册表项中添加 Access 使用的工作组信息文件的完整路径名称:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\SystemDB
配置了注册表项后,请使用 sp_addlinkedsrvlogin 创建从本地登录到 Access 登录的登录映射:
sp_addlinkedsrvlogin 'Nwind', false, 'Joe',
'AccessUser', 'AccessPwd'
Access 数据库没有目录和架构名称。因此,基于 Access 的链接服务器中的表可以在分布式查询中使用表单 linked_server...table_name 的四部分名称进行引用。
下例从名为 Nwind 的链接服务器中检索 Employees 表的所有行。
SELECT *
FROM Nwind...Employees
---------------------------------------------------------------
使用OPENROWSET,假定存在c:\temp\test.mdb,其上有表UserManage,使用以下语句可将数据插入到Access数据库
Insert into
OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'c:\temp\test.mdb';'Admin';'', UserManage)
(UserID,[Password])
values(
'11111',
'abdcd')
---------------------------------------------------------------
我在存储过程里也试了,可以的
另外,执行分布式查询,需要
SET ANSI_WARNINGS ON
SET ANSI_NULLS ON