Я поддерживаю классическое веб-приложение ASP, обращающееся к базе данных (SQL Server 2012) на отдельном сервере.
Существует много работы по интеграции с этим устаревшим приложением. Многие из них связаны с импортом файлов, размещенных на сервере базы данных. Они обрабатываются пакетами служб SSIS, запускаемыми заданием агента SQL Server и запускаемыми объектами ASP COM+.
Я хотел бы иметь возможность проверить, существует ли файл импорта НА СЕРВЕРЕ БАЗЫ ДАННЫХ (отдельно от веб-сервера) до запуска пакетов импорта. Таким образом, он должен иметь возможность завершиться ошибкой и вернуть ошибку, указывающую на то, что файл не найден.
Наша база данных и веб-сервер раньше находились на одном компьютере. Теперь они были разделены.
Эта функциональность должна быть универсальной, чтобы я мог применять ее ко всем операциям импорта, в идеале передавая путь к файлу в качестве параметра.
С этой средой и классическим ограничением ASP я рассматривал следующие варианты:
a) Добавление шага к заданию агента SQL Server, которое запускает TSQL, выполняется следующим образом:
- Шаг предшествует тому, который вызывает пакет импорта служб SSIS или выполняется как отдельное задание.
- Он зависит от того, что задание агента 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 Ещё не пробовал
Любая передовая практика или опыт будут наиболее полезными.