Событие зависимости SQL возникает при изменении базы данных, но не при изменениях таблицы - PullRequest
0 голосов
/ 02 декабря 2010

Работа над чужим кодом, в котором они установили событие зависимости от SQL (SQL 2008).Не то, с чем я ужасно знаком, поэтому просто занимался чтением и тестированием.

Событие называется CustomerServicesTable_OnChange и, вероятно, предназначено для запуска при каждом изменении таблицы customerServices.Однако, когда БД изменяется через код (мы используем Entity Framework), событие не запускается.

Из любопытства я запустил SQL Server Manager и попытался выполнить запросы к таблице напрямую, чтобы посмотреть, что произойдет.Выполнение запросов UPDATE, INSERT или ALTER для таблицы не вызвало событие.

Чтобы проверить, включена ли зависимость SQL, я затем выполнил следующие команды для базы данных, предположительно, первый шаг в включенииservice:

ALTER DATABASE customers SET SINGLE_USER with rollback immediate
alter database customers set enable_broker
ALTER DATABASE customers SET MULTI_USER

К моему удивлению, выполнение этих команд вызвало событие!

Похоже, что зависимость работает как с базой данных в целом, так и с таблицами (s).) в БД, отличной от CustomerServices.Кто-нибудь может предложить дальнейший путь, чтобы помочь мне точно определить, в чем проблема?

РЕДАКТИРОВАТЬ: я обнаружил, что не команды ALTER DATABASE вызывают событие, но тот факт, что SET SINGLE_USER вызываетошибка.Хотя мне это мало помогает.

Приветствия, Мэтт

Ответы [ 2 ]

0 голосов
/ 08 декабря 2010

Наконец-то все получилось:

1) Для владельца базы данных должна быть установлена ​​учетная запись SQL Server, а не учетная запись администратора Windows.

2) Служба наблюдения (т. Е. Команда SQL, введенная для запуска службы уведомлений) должна быть настроена на ту же учетную запись пользователя, которая будет использоваться для выполнения обновлений базы данных, за которыми вы следите.

Я выполнил кучу разрешений, но я думаю, что это две ключевые проблемы, чтобы заставить его работать.

0 голосов
/ 02 декабря 2010

Сначала прочтите это, чтобы понять, как работает SqlDependency: Таинственное уведомление .

Возможно, уведомления накапливаются в sys.transmission_queue, и transmission_status будет указывать, почему это происходит.

Снимок в темноте: ДБО сопоставлен с неверным SID:

ALTER AUTHORIZATION ON DATABASE::customers to sa;
...