2015-04-24 2 views
0

Я работаю над проектом, который требует выполнения метода/функции C# (закодированного на веб-странице) с использованием триггера или хранимой процедуры в SQL Server.Выполнить метод/функцию Execute из триггера в SQL Server

Я нашел Execute-NET-Code-under-SQL-Server

Но, как указано на этой ссылке, я должен изменить свойства базы данных TRUSTWORTHY в ON.

Есть ли способ, которым я могу это сделать без изменения свойств базы данных?

Заранее спасибо

+3

Почти наверняка нет. –

+0

Вы определенно * не * должны изменить это свойство базы данных. Это нужно вам только тогда, когда ваша сборка без знака и вам нужно получить доступ к внешним ресурсам. –

+1

@PanagiotisKanavos Поскольку OP нужно каким-то образом вызвать внешнюю веб-страницу (если я правильно понял его) - ему нужно ДОВЕРИТЬ и сборку с разрешением EXTERNAL_ACCESS. Единственная альтернатива - это запуск внешней программы, как я уже сказал в своем ответе. –

ответ

1

Ну, если вы не хотите (или может) использовать SQLCLR - вы можете создать некоторые автономные консольное приложение, содержащее все C# код, который нужно, а затем выполнить это приложение с некоторыми параметрами, используя xp_cmdshell.

Но обратите внимание: xp_cmdshell отключена по умолчанию, вы должны включить его с помощью

EXEC sp_configure 'xp_cmdshell', 1 

Поскольку xp_cmdshell опции сервера - вам не нужно, чтобы изменить свойство базы данных, но вы должны изменить параметры сервера для включите его в случае, если он отключен. Выберите себя - что измениться. ;)

+1

Это гораздо хуже с точки зрения безопасности, чем изменение параметра базы данных - 'xp_cmdshell' может легко выполнять вредоносные скрипты, используя учетную запись службы SQL Server –

0

Нужно ли выполнять внешний код синхронно? Другими словами, должен ли внешний код запускаться и запускаться до завершения вашего триггера?

Если да, то предлагаю изменить свой дизайн. Вы неправильно используете триггеры и заставляете любую операцию DML запускать триггер чрезвычайно медленно.

Предполагая, что ответ не является то, у вас есть варианты, чтобы поставить в очередь все, что нужно сделать, и выполнить эту работу асинхронно. Например, ваш триггер может создать запись в таблице рабочих очередей, когда ей нужен этот внешний код для запуска. Некоторые другие процессы (например, запланированная задача, агент SQL, что-то в вашем приложении, SQL Server Broker) могут контролировать эту таблицу для новых записей и при необходимости погашать соответствующие вызовы.

Смежные вопросы