У меня есть база данных SQL Server 2017 Express, к которой могут обращаться до 6 планшетов, которые подключаются через приложение Angular 7 с помощью веб-служб REST.
У меня есть хранимая процедура, позволяющая вставить нового пользователя вконкретная таблица базы данных. Вставка всегда будет вставлять только 1 запись за раз, но с 6 клиентами хранимая процедура может быть вызвана каждым клиентом почти одновременно.
Последним этапом процесса является печать формы соглашения на конкретном принтере. Первоначально это должно было быть выполнено на стороне клиента, но планшеты не имеют возможности печати на сетевом принтере, поэтому функциональность теперь должна находиться на стороне сервера.
С этим новым требованием,форма соглашения - это RTF-документ, который читается, значения заполнителей заменяются значениями из оператора вставки, записываются во временный файл и затем печатаются на сетевом принтере через приложение (скорее всего, Wordpad), которое связано с форматом файла RTF. .
Существует также интерфейсное приложение MS Access, которое использует связанные серверы для подключения к базе данных, но не имеет возможности создавать новых пользователей, но должно иметь возможность инициировать «печать». действие соглашения в случае, если соглашение не печатается из-за проблемы с принтером, проблемы с сетью и т. д.
У меня есть код C #, написанный для выполнения операции чтения / изменения / записи / печати формы, котораяиспользует свойство StartSfo UseShellExecute вместе с процессомМетод .Start.
Поскольку процесс чтения / изменения / записи / печати занимает несколько секунд, меня беспокоит наличие хранимой процедуры для добавления блокировки регистрации на этот промежуток времени.
Я почти уверен, что мне понадобится хранимая процедура CLR, чтобы клиент MS Access мог инициировать операцию печати, поэтому я выбрал либо хранимую процедуру Add_Registration (Transact-SQL)вызовите хранимую процедуру CLR для выполнения операции чтения / изменения / записи / печати или триггера вставки (CLR или Transact-SQL) в таблицу, которая вызывает хранимую процедуру CLR для чтения / изменения / записи / печати.
Я мог бы избежать вызова от триггера к хранимой процедуре, дублируя код как в триггере CLR, так и в хранимой процедуре CLR, если для этого есть веская причина, но старался по возможности избежать дублирования кода.
Решения, которые я сейчас рассматриваю, заключаются в следующем, но я не уверен, как SQLСервер обрабатывает различные сценарии:
Триггер CLR или Transact-SQL Insert
в таблице регистрации, который вызывает хранимую процедуру CLR, которая выполняет процесс чтения / изменения / записи / печати.
Хранимая процедура CLR, которая выполняет процесс чтения / изменения / записи / печати, вызывается из текущей add_registration
хранимой процедуры Transact-SQL
Вопросы, к которым я продолжаю возвращаться:
Как выполняются триггеры Insert
CLR, если несколько вставок выполняются в одно и то же или почти в одно и то же время (только 1 на операцию)они поставлены в очередь, а затем обрабатываются синхронно или выполняются немедленно?
Тот же вопрос, что и в вопросе № 1, за исключением триггера Transact-SQL
Как обрабатываются хранимые процедуры CLR, если они вызываются несколькими клиентами в одно и то же или почти в одно и то же время, они помещаются в очередь, а затем обрабатываются синхронно, или каждый вызов хранимой процедуры являетсясразу же?
Тот же вопрос, что и в # 3, за исключением хранимой процедуры Transact-SQL
Если хранимая процедура CLR вызывается из Transact-SQL триггер, блокируется ли триггер до тех пор, пока хранимая процедура не вернется, или вызов хранимой процедуры будет порожден ее собственным процессом (или аналогичным методом) с триггером, возвращаемым немедленно?
Тот же вопрос, что и в # 5, за исключением того, что триггер CLR вызывает хранимую процедуру CLR
Я ищу любые другие предложения и / или разъяснения о том, как SQL Server обрабатывает этисценарии.