【问题标题】:T-SQL procedure call using OPENROWSET使用 OPENROWSET 调用 T-SQL 过程
【发布时间】:2020-06-10 22:57:33
【问题描述】:

我有两个问题。

第一个查询在C:\... 文件夹中创建了一个.csv 文件,没有错误:

INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=C:\Temp\TEMP_SQL_FOLDER\T-SQL to csv\;HDR=YES;FMT=Delimited','SELECT * FROM [test3.csv]') 
    SELECT Id, PatientNumber, Title_Id, FirstName, LastName, Gender_Id 
    FROM PPM2..Activity_Patient ap

第二个查询应该做同样的事情,除了 SELECT 语句被替换为过程调用:

INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=C:\Temp\TEMP_SQL_FOLDER\T-SQL to csv\;HDR=YES;FMT=Delimited','SELECT * FROM [test3.csv]') 
    EXEC dbo.PPMLoad_MediRecOSRServices @FinancialYear='2020'

第二条语句不起作用并抛出此错误:

消息 7390,第 16 级,状态 2,第 10 行
无法执行请求的操作,因为链接服务器“(null)”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”不支持所需的事务接口。

我启用了必要的设置:

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

第二个查询根本不运行。我也没有使用任何链接服务器。这只是一个简单的导出到本地 C: 驱动器。

有什么想法吗?

【问题讨论】:

    标签: sql-server tsql export-to-csv openrowset


    【解决方案1】:

    错误消息的含义是 SQL Server 正在尝试启动 Access 驱动程序不支持的分布式事务。

    您可以尝试允许驱动程序的非事务更新:

    EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'NonTransactedUpdates', 1
    

    我在an answer on dba.stackexchange 中发现了这一点 - 它还重复了 ACE 驱动程序文档中的以下警告,在这种情况下您可能应该提防:

    Access 数据库引擎 2016 Redistributable 不适用于:. . .供系统服务或服务器端程序使用,其中代码将在系统帐户下运行,或将同时处理多个用户身份,或高度可重入并期望无状态行为。示例包括在没有用户登录时从任务调度程序运行的程序,或从服务器端 Web 应用程序(如 ASP.NET)调用的程序,或在 COM+ 服务下运行的分布式组件。

    【讨论】:

      猜你喜欢
      • 2014-03-29
      • 2014-11-03
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      相关资源
      最近更新 更多