Уведомления о запросах SQL и GetDate()

В настоящее время я работаю над запросом, зарегистрированным для уведомлений о запросах. В соответствии с правилами обслуживания уведомлений я могу использовать только детерминированные функции в моих запросах, настроенных для подписки. Однако GetDate() (и почти любые другие средства, которые я могу придумать) недетерминированы. Всякий раз, когда я извлекаю свои данные, я хотел бы иметь возможность ограничить набор результатов только соответствующими записями, которые определяются текущим днем.

Кто-нибудь знает обходной путь, который я мог бы использовать, который позволил бы мне использовать текущую дату, чтобы отфильтровать мои результаты, но не сделать запрос на уведомление о запросе недействительным?

Пример кода:

SELECT fcDate as RecordDate, fcYear as FiscalYear, fcPeriod as FiscalPeriod, fcFiscalWeek as FiscalWeek, fcIsPeriodEndDate as IsPeriodEnd, fcPeriodWeek as WeekOfPeriod
FROM dbo.bFiscalCalendar 
WHERE fcDate >= GetDate() -- This line invalidates the query for notification...

Другие мысли:

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

Пример кода 2:

SELECT fcDate as RecordDate, fcYear as FiscalYear, fcPeriod as FiscalPeriod, fcFiscalWeek as FiscalWeek, fcIsPeriodEndDate as IsPeriodEnd, fcPeriodWeek as WeekOfPeriod
FROM dbo.bFiscalCalendar    
INNER JOIN dbo.xApplicationControls ON  fcDate >= acValue AND acName = N'Cache_CurrentDate' 

У кого-нибудь есть предложения?

РЕДАКТИРОВАТЬ: Вот ссылка на MSDN, которая дает правила для служб уведомлений

2 ответа

Решение

Как оказалось, я разобрался с решением. По сути, я делал недействительными мои попытки запроса, потому что я приводил значение как DateTime, которое помечает его как недетерминированное. Даже если вы специально не вызываете актеров, а делаете что-то похожее на:

RecordDate = 'date_string_value'

Вы все еще в конечном итоге с датой литья. Надеюсь, это поможет кому-то еще, кто решит эту проблему.

Эта ссылка мне очень помогла.

http://msdn.microsoft.com/en-us/library/ms178091.aspx

Хороший способ обойти это - просто создать представление с надписью "SELECT GetDate() AS Now", а затем использовать представление в своем запросе.

РЕДАКТИРОВАТЬ: я ничего не вижу о том, чтобы не использовать пользовательские функции (это то, что я использовал бит "представление сегодня" в). Так можете ли вы использовать UDF в запросе, который указывает на представление?

Другие вопросы по тегам