Я использую FileTable в SQL Server 2014 и должен запустить исполняемый файл, который анализирует имя файла любого вставленного/обновленного/удаленного файла, а затем, в свою очередь, исполняемый файл вставляет в другие таблицы в базе данных информацию, которая была проанализирована из имени. Я не ожидаю, что .exe будет работать долго, но если он столкнется с проблемами, я не хочу блокировать его в течение длительного периода времени.SQL Server 2014: FileTable Trigger с хранимой процедурой w/xp_cmdshell
Например:
CREATE PROCEDURE filename_parser
@name nvarchar(255)
AS
BEGIN
DECLARE @exe nvarchar(255)
SET @exe = 'c:\test\my.exe "' + @name + '"'
EXEC master..xp_cmdshell @exe
END
GO
При запуске хранимой процедуры из триггера INSERT
или UPDATE
, например:
USE [db_1]
GO
CREATE TRIGGER [dbo].[i_table_a]
ON
[dbo].[table_a]
AFTER
INSERT
AS
DECLARE @file nvarchar(255)
SELECT TOP 1
@file = name
FROM
inserted
EXEC filename_parser @name = @file
будет я в конечном итоге замок table_a
, пока не завершится исполняемый? Извините, если ответ очевиден. Я не нашел прямого ответа. Любая помощь/указание в соответствующем направлении приветствуется.
Ссылки по теме:
Do stored procedures lock tables/rows?
SQL Server - How to lock a table until a stored procedure finishes
У вас есть исходный код для вашего .exe? Возможно, try/catch будет изящно обрабатывать любые проблемы, регистрировать их (чтобы вы могли анализировать, отлаживать позже) и быстро выйти. – tgolisch
Действительно, я попробовал/поймал. Я предполагаю, что он достаточно быстро регистрируется. Я начинаю добавлять множество триггеров в базы данных, хотя мне необходимо обновить их от старых систем до более новых, тогда как старые системные данные все еще создаются, а новые системы нуждаются в данных. Хотя я вижу вашу точку зрения, чем больше я думаю обо всем, что нужно сделать, тем больше основной вопрос относится к моей ситуации, то есть, является ли триггер блокировкой таблицы до завершения хранимой процедуры. – GibralterTop
Microsoft docs говорит, что xp_cmdshell будет работать синхронно. Триггеры также запускаются синхронно. Итак, если ваш exe застрянет, он повесит триггер, который повесит вставку и другие вещи. https://msdn.microsoft.com/en-us/library/ms175046.aspx#remarks – tgolisch