【问题标题】:Access denied when trying to run stored procedure on MS SQL Server尝试在 MS SQL Server 上运行存储过程时访问被拒绝
【发布时间】:2015-08-21 16:21:31
【问题描述】:

我在尝试运行存储过程时收到以下错误消息。

消息 7399,级别 16,状态 1,过程 accountupdater,第 10 行 OLE 链接服务器“(null)”的数据库提供程序“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。 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
  • 我运行了上面提到的命令,但仍然得到同样的错误。我以管理员身份重新运行 SQL Server 管理工作室。再次重新运行上述命令。尝试执行 "SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Text; HDR=YES; Database=D:\Innoprise\', 'SELECT * FROM flagstaffAccountUpdate.csv')" 它有效,但是当当我尝试执行存储过程时,我仍然遇到同样的错误
  • 尝试关注这个帖子aspsnippets.com/Articles/…
  • 谢谢!,我重启SQL Server服务后,没有更多错误了!!!

标签: sql-server stored-procedures oledb oledbdataadapter oledbexception


【解决方案1】:

如果您已经安装了 Microsoft Access Database Engine 2010,请执行以下查询并重新启动 SQL Server Management Studio 或 SQL Services。 Refer here

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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 2022-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多