Я застрял с проблемой, которую мне не удалось решить, и должно быть простое объяснение.Я был бы очень признателен за любую помощь.
У нас есть сервер БД (DB01) и веб-сервер (Web02).На Web02 у нас есть страница VBScript, которая просматривает все папки Агентства на Web02 и находит новые файлы .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
Вот триггер, который запускает хранимую процедуру, расположенную на странице VBScript, которая обрабатывает файл .txt:
Здесьявляются изображениями настроек безопасности для наших папок Web02 с файлами .txt:
Такая же защита установлена для всех дочерних папок, в которыхфайлы ftp'd.
Любая помощь по этому вопросу была бы замечательной ... Это может иметь какое-то отношение к openrowset, это могли быть некоторые безумные пропущенные разрешения, но мы застряли.
Спасибо за помощь!