SqlDependency без выполнения запроса - PullRequest
3 голосов
/ 28 декабря 2011

Можно ли запустить SqlDependency в C # для Sql Server без выполнения запроса?

У меня есть несколько таблиц, которые могут вырасти довольно большими. Выполнение запроса по таблице, чтобы узнать, изменилась ли строка, может занять много времени.

Ответы [ 2 ]

5 голосов
/ 28 декабря 2011

Нет, SqlDependency требует выполнения SqlCommand.

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

Если любая строка, которая изменяется в исходной таблице, должна вызывать зависимость, то ваша таблица извлечения может быть такой же простой, как одна строка, содержащаяСчетчик количества строк, которые изменились.Когда это значение изменяется, зависимость будет срабатывать.

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

0 голосов
/ 07 ноября 2013

Принятый ответ работает, но есть альтернатива, если вы находитесь в положении, когда вы не можете (или не хотите) использовать триггеры.

Используйте хранимую процедуру с параметром, который изменяется каждый раз, когда вы извлекаете данные. Например:

Alter PROCEDURE someschema.SQLDependency_DC_PRE
    @MaxDCIdx INT = 1
AS

SELECT DCIdx FROM someschema.DC_PRE WHERE DCIdx >= @MaxDCIdx ORDER BY DCIdx DESC;

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

...