[英]Access denied when trying to run stored procedure on MS SQL Server
尝试运行存储过程时,出现以下错误消息。
消息7399,级别16,状态1,过程accountupdater,行10链接服务器“(空)”的OLE DB访问接口“ Microsoft.ACE.OLEDB.12.0”报告了一个错误。 拒绝访问。 消息7350,级别16,状态2,过程accountupdater,行10无法从OLE DB提供程序“ Microsoft.ACE.OLEDB.12.0”获取链接服务器“(空)”的列信息。
附加信息:以前它可以运行,但是在安装MS Office之后,它开始显示错误消息。 我们卸载了MS Office,然后重新安装了“ Microsoft Access Database Engine 2010”。 仍然收到错误消息。
做了一些研究,发现我需要安装“ Microsoft Access Database Engine 2010”。 我做到了,但仍然收到相同的错误消息。
ALTER PROCEDURE [dbo].[accountupdater]
AS
DECLARE @accountNum numeric, @businessFEIN varchar(100), @stateID varchar(100), @dbaName varchar(100), @addressLine1 varchar(100), @addressLine2 varchar(100), @city varchar(100), @state varchar(100), @zip varchar(100), @businessName varchar(100)
DECLARE accountCursor CURSOR FAST_FORWARD FOR
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Text; HDR=YES; Database=D:\Innoprise\',
'SELECT * FROM flagstaffAccountUpdate.csv') ors
OPEN accountCursor
--perform first fetch
FETCH NEXT FROM accountCursor INTO @accountNum, @businessFEIN, @stateID, @dbaName, @addressLine1, @addressLine2, @city, @state, @zip, @businessName
--check if there are more rows to fetch
WHILE @@FETCH_STATUS = 0
BEGIN
update BUSINESS SET FEIN=coalesce(@businessFEIN, FEIN), name=coalesce(@businessName, name) WHERE ID = (select business_id from VENDOR v where v.vendornumber=@accountNum);
update DBA set name=coalesce(@dbaName, name) where id = (select primarydba_id from vendor v where v.vendorNumber=@accountNum);
update VENDOR set stateId=coalesce(@stateID, stateID) where vendorNumber=@accountNum;
update ADDRESS set addressLine1=coalesce(@addressLine1,addressLine1), ADDressline2=coalesce(@addressLine2,addressline2),
city=coalesce(@city,city), state=coalesce(@state,state), zipCode=coalesce(@zip,zipCode)
where ID = (select v.address_ID from VENDOR v where v.vendorNumber = @accountNum);
FETCH NEXT FROM accountCursor INTO @accountNum, @businessFEIN, @stateID, @dbaName, @addressLine1, @addressLine2, @city, @state, @zip, @businessName
END
CLOSE accountCursor
DEALLOCATE accountCursor
如果您已经安装了Microsoft Access Database Engine 2010,请执行以下查询并重新启动SQL Server Management Studio或SQL Services。 请参考这里
USE [master]
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.