Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Отследить появление файла в FileTable и создать в ней ещё файл  [new]
tunknown
Member

Откуда:
Сообщений: 748
Нужно при копировании файла по UNC пути в FileTable автоматически создать для него ещё один файл в той же директории.

В триггере этого сделать нельзя
BOL
Triggers defined on a FileTable cannot update any FileTables

Даже если создавать вызовом приложения из триггера, то будет блокировка, о которой предупреждается
BOL
This restriction exists mainly to prevent a trigger from getting into locking conflicts with the locks held by the file system access in the same transaction.

Я не смог понять, может ли Alert следить за локальным UNC путём. За сетевым- пишут, не может.

Alert может следить только за FileTable директорией <DataBase>\Files, внутри неё- уже не следит
SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA "CIM_DirectoryContainsFile" AND TargetInstance.GroupComponent = "Win32_Directory.Name=\"*:\\\\**\\\\***\\\\Files\""


Понятно, что можно сделать job по расписанию или как-то "велосипедно пробрасывать" событие. Есть ли более стандартный способ?
24 июл 17, 13:09    [20669568]     Ответить | Цитировать Сообщить модератору
 Re: Отследить появление файла в FileTable и создать в ней ещё файл  [new]
tunknown
Member

Откуда:
Сообщений: 748
Неверно написал:
вместо
Alert может следить только за FileTable директорией <DataBase>\Files, внутри неё- уже не следит
следует читать
Alert может следить только за FileTable директорией <DataBase>, за <DataBase>\Files- уже не следит
24 июл 17, 13:12    [20669581]     Ответить | Цитировать Сообщить модератору
 Re: Отследить появление файла в FileTable и создать в ней ещё файл  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7383
tunknown,

сделайте через Service Broker.
24 июл 17, 13:25    [20669651]     Ответить | Цитировать Сообщить модератору
 Re: Отследить появление файла в FileTable и создать в ней ещё файл  [new]
Rankatan
Member

Откуда:
Сообщений: 250
Может создать таблицу-очередь на добавление файла, которая будет заполняться триггером на FileTable. А саму очередь будет обрабатывать джоб который работает в бесконечном режиме?
24 июл 17, 13:31    [20669692]     Ответить | Цитировать Сообщить модератору
 Re: Отследить появление файла в FileTable и создать в ней ещё файл  [new]
tunknown
Member

Откуда:
Сообщений: 748
Владислав Колосов
tunknown,
сделайте через Service Broker.
Интересный вариант.

Rankatan
Может создать таблицу-очередь на добавление файла, которая будет заполняться триггером на FileTable. А саму очередь будет обрабатывать джоб который работает в бесконечном режиме?
Сейчас так и сделано, но хотелось бы без опроса по расписанию.
24 июл 17, 13:33    [20669710]     Ответить | Цитировать Сообщить модератору
 Re: Отследить появление файла в FileTable и создать в ней ещё файл  [new]
Rankatan
Member

Откуда:
Сообщений: 250
еще идея

попробуй из треггера вызвать что-то типа

exec master..xp_cmdshell 'osql -d MYDB-E -n -Q "insert into t1 values ('........')"'

Будет вызвано вне транзакции поэтому может сработать. Но это тот еще способ.
24 июл 17, 13:55    [20669828]     Ответить | Цитировать Сообщить модератору
 Re: Отследить появление файла в FileTable и создать в ней ещё файл  [new]
tunknown
Member

Откуда:
Сообщений: 748
Rankatan
еще идея

попробуй из треггера вызвать что-то типа

exec master..xp_cmdshell 'osql -d MYDB-E -n -Q "insert into t1 values ('........')"'

Будет вызвано вне транзакции поэтому может сработать. Но это тот еще способ.
Делал, вызывает блокировку, как и предупреждено в BOL.
24 июл 17, 15:51    [20670343]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить