【发布时间】:2018-05-17 16:29:44
【问题描述】:
我遇到了一个我无法克服的问题,必须有一个简单的解释。我将不胜感激。
我们有一个 DB 服务器 (DB01) 和一个 Web 服务器 (Web02)。在 Web02 上,我们有一个 VBScript 页面,该页面查看 Web02 上所有代理文件夹的内部,并找到从第 3 方发送以供使用的新 .txt 文件。我们正在使用存储过程来完成将逗号分隔文件中的数据插入到 DB01 上的数据库中。有一段时间,这工作得很好,但现在我们遇到了一些问题。我们不确定权限是否已更改或发生了什么,但我们知道文本文件正在被读取,并且当我将插入命令复制到本地 SSMS 并执行它时,它会毫无问题地插入,所以命令也很好。 DB01 在运行插入时似乎存在问题,就好像它无法读取文件一样。这是我们收到的错误:
Microsoft SQL Server Native Client 11.0 error '80040e14'
Cannot process the object "SELECT * FROM [Edit Error Management Report_3008963.txt]". The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" indicates that either the object has no columns or the current user does not have permissions on that object.
/billing/EditErrors_ProcFiles.asp, line 319
这是我们可以在本地使用的插入命令,它可以工作:
INSERT INTO RealMedEditErrors (AgencyID, BatchName, DateofService, ErrorDesc, ErrorNumber, MajorCategory, MinorCategory, PatientControlNumber, PatientName, PayerName, RealMedClaimID, RenderingProvider, StatusInEE, SubmissionDate, TotalCharges, ClaimInstanceID)
SELECT 200, [Batch Name], [Date of Service], [Error Description], [Error Number], [Major Category], [Minor Category], [Patient Control #], [Patient Name], [Payer Name], [Availity Claim ID], [Rendering Provider Name], [Status in EE Mgmt], [Submission Date], [Total Charges], [Claim Instance ID]
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text; Database=\\INTEG2-WEB02\EDIGateways\DEV\Availity\AgencyName\Reports\Queue\;HDR=Yes;','SELECT * FROM [Edit Error Management Report_3008963.txt]')
WHERE NOT ([Batch Name] IS NULL)
这是存储过程:
USE [checkpoint_dev]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[usp_InsertEditError]
@AgencyID Int,
@FileName varchar(150),
@UnityDir varchar(150)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
BEGIN
INSERT INTO AppLog (Msg, FileName, Comments) VALUES (@AgencyID, @FileName, @UnityDir);
Declare @sql nvarchar(max)
Set @sql='INSERT INTO RealMedEditErrors (AgencyID, BatchName, DateofService, ErrorDesc, ErrorNumber, MajorCategory, MinorCategory, PatientControlNumber, PatientName, PayerName, RealMedClaimID, RenderingProvider, StatusInEE, SubmissionDate, TotalCharges, ClaimInstanceID)';
SET @sql = @sql + ' SELECT '+CAST(@AgencyID AS NVARCHAR(10))+', [Batch Name], [Date of Service], [Error Description], [Error Number], [Major Category], [Minor Category], [Patient Control #], [Patient Name], [Payer Name], [Availity Claim ID], [Rendering Provider Name], [Status in EE Mgmt], [Submission Date], [Total Charges], [Claim Instance ID]';
SET @sql = @sql + ' FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',
''Text;Database=\\INTEG2-WEB02\EDIGateways\Dev\Availity\'+@UnityDir+'\REPORTS\Queues\;HDR=Yes;'',
''SELECT * FROM ['+@FileName+']'')';
Exec(@sql)
END
END
GO
这里是触发存储过程的触发器,该存储过程位于处理 .txt 文件的 VBScript 页面中:
以下是包含 .txt 文件的 Web02 文件夹的安全设置图片:
为所有子文件夹设置相同的安全性,这是文件被 ftp'd 所在的位置。
在这方面的任何帮助都会很棒...... 它可能与 openrowset 有关,可能是一些疯狂的被忽略的权限,但我们被卡住了。
感谢您的帮助!
【问题讨论】:
标签: sql sql-server vbscript permissions asp-classic