Вопрос

В настоящее время я работаю над запросом, зарегистрированным для уведомлений о запросах. В соответствии с правилами обслуживания уведомлений я могу использовать только детерминированные функции в моих запросах, настроенных для подписки. Однако 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 , которая дает правила для служб уведомлений

Это было полезно?

Решение

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

RecordDate = 'date_string_value'

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top