2009-10-30 3 views
0

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

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

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

Пример кода 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' 

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

EDIT: Вот link on MSDN что дает правила для Notification Services

ответ

2

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

RecordDate = 'date_string_value' 

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

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

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

+0

Хорошая ссылка :) Я предлагаю отметить это как ответ – MartW

0

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

EDIT: Я ничего не вижу о том, чтобы не использовать пользовательские функции (это то, что я использовал в настоящее время в представлении «сегодня»). Так можете ли вы использовать UDF в запросе, который указывает на представление?

+0

К сожалению, мнения не могут быть доступны в запросах на услуги уведомления либо. – Nathan

+0

Как насчет UDF? Я не вижу ссылки на них, которые запрещены. – MartW

+0

Разрешены UDF, но только если они также не содержат недетерминированных функций (по крайней мере, я на 99% уверен, что это правильно). Однако я дважды проверю этот вариант. Благодарю. – Nathan