Параметры проверки наличия файла в файловой системе сервера БД

Я поддерживаю классическое веб-приложение ASP, обращающееся к базе данных (SQL Server 2012) на отдельном сервере.

Существует много работы по интеграции с этим устаревшим приложением. Многие из них связаны с импортом файлов, размещенных на сервере базы данных. Они обрабатываются пакетами служб SSIS, запускаемыми заданием агента SQL Server и запускаемыми объектами ASP COM+.

Я хотел бы иметь возможность проверить, существует ли файл импорта НА СЕРВЕРЕ БАЗЫ ДАННЫХ (отдельно от веб-сервера) до запуска пакетов импорта. Таким образом, он должен иметь возможность завершиться ошибкой и вернуть ошибку, указывающую на то, что файл не найден.

Наша база данных и веб-сервер раньше находились на одном компьютере. Теперь они были разделены.

Эта функциональность должна быть универсальной, чтобы я мог применять ее ко всем операциям импорта, в идеале передавая путь к файлу в качестве параметра.

С этой средой и классическим ограничением ASP я рассматривал следующие варианты:

a) Добавление шага к заданию агента SQL Server, которое запускает TSQL, выполняется следующим образом:

  1. Шаг предшествует тому, который вызывает пакет импорта служб SSIS или выполняется как отдельное задание.
  2. Он зависит от того, что задание агента SQL Server возвращает «успех» или «неудача», указывая на то, что файл найден или не найден соответственно.

Проблема. Насколько мне известно, это не универсальная информация. Это будет означать задание для каждого типа импорта, поскольку одновременно может обрабатываться только одно задание, а задания не поддерживают параметры.

b) Использование недокументированной хранимой процедуры xp_fileexist следующим образом

CREATE PROCEDURE [dbo].[spFileExists]
@fpath varchar(255)
AS
       begin
              DECLARE @fexists int
              EXEC master.dbo.xp_fileexist @fpath, @fexists output
              SELECT cast(@fexists as bit)
       end

GO

Проблема: я протестировал этот подход, и он обращается к файловой системе ВЕБ-СЕРВЕРА вместо предполагаемой файловой системы сервера БАЗЫ ДАННЫХ. Если я помещаю файл на веб-сервер, используя ожидаемый путь, он возвращает 1, указывающий, что он там. Если я удалю его и размещу на сервере БД, удалив с веб-сервера, он вернет 0.

Зачем ему проверять файловую систему веб-сервера?

c) Создание сборки SQL Server CLR на языке .NET и попытка использования операций файловой системы .NET для доступа к файловой системе базы данных. Ещё не пробовал

d) Использование sqlcmd Ещё не пробовал

Любая передовая практика или опыт будут наиболее полезными.


person user919426    schedule 23.08.2013    source источник
comment
xp_fileexist, вероятно, не работает на сервере базы данных, потому что учетная запись службы SQL Server не имеет прав на каталог (или, может быть, файл на самом деле там не существует).   -  person Aaron Bertrand    schedule 23.08.2013
comment
@AaronBertrand Я проверил это, как упоминалось в моем посте.   -  person user919426    schedule 23.08.2013


Ответы (1)


В итоге я пересмотрел код COM+ построчно и пересмотрел конфигурации среды. b) теперь работает Я не могу воспроизвести проблему, которая у меня была, но я думаю, что она связана с конфигурацией приложения.

Поэтому я прибег к использованию xp_fileexist, хотя я понимаю, что не рекомендуется использовать недокументированные SP (они могут быть удалены без предупреждения в следующих версиях).

person user919426    schedule 27.08.2013