Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Автоматическая смена статуса, через n дней  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
zvezda_t
Mnior
Когда вы ставите status = 2, вы заодно другие поля изменяете???
да, заодно устанавливается дата изменения этого статуса.
Evil.
Кроме изменения этой даты и поля статуса?
30 май 11, 12:48    [10730953]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
zvezda_t
Member

Откуда: Урал
Сообщений: 919
Mnior, нет. другие поля не меняются.
30 май 11, 13:14    [10731209]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
zvezda_t
Member

Откуда: Урал
Сообщений: 919
Mnior, но кажется я поняла о чем Вы говорите.
То есть если бы у меня было поле, которое заполняется только при присвоении статусу значения=2, то тогда я могла бы ориентируясь на это поле написать условие, для вычисляемого поля статус. :)
30 май 11, 13:19    [10731241]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Умница.
30 май 11, 15:59    [10732907]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
zvezda_t
Member

Откуда: Урал
Сообщений: 919
Скажите пожалуйста, вычисляемое поле, не может что ли быть индексом?

ругается, теперь:
автор
Column 'status' in table 'dbo.docs' cannot be used in an index or statistics or as a partition key because it is non-deterministic.
31 май 11, 14:47    [10739031]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
Glory
Member

Откуда:
Сообщений: 104751
because it is non-deterministic.
31 май 11, 14:52    [10739082]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
zvezda_t, может если оно deterministic
31 май 11, 14:52    [10739086]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
zvezda_t
Member

Откуда: Урал
Сообщений: 919
deterministic - это значит есть зависимость от даты?
если это поле не будет индексом, то запросы медленнее будут выполнятся. У меня постоянно идет отбор по статусу.
Что можно сделать?
31 май 11, 14:59    [10739155]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Детерминированные и недетерминированные функции

ФункцияКомментарии
CONVERTДетерминирована, кроме следующих случаев. Исходный тип — sql_variant. Конечный тип — sql_variant, и его исходный тип недетерминирован. Исходный или конечный тип — datetime или smalldatetime, другой исходный или конечный тип — строка символов, и задан недетерминированный стиль. Чтобы быть детерминированным, параметр стиля должен быть константой. Кроме того, стили, которые меньше или равны 100, являются недетерминированными, за исключением стилей 20 и 21. Стили более 100 являются детерминированными, за исключением стилей 106, 107, 109 и 113.
31 май 11, 15:06    [10739246]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Использование данных даты и времени
31 май 11, 15:07    [10739267]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
zvezda_t
Member

Откуда: Урал
Сообщений: 919
если я вычисляю поле так, индекс создаётся:
(case when [status]=(1) AND [date_doc] IS NOT NULL then (2) end)

а так, индекс ругается:
(case when [status]=(1) AND [date_doc]<dateadd(day,datediff(day,(0),getdate())-(13),(0)) then (2) end)
31 май 11, 15:42    [10739628]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
zvezda_t,
getdate()
31 май 11, 15:46    [10739659]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
zvezda_t
Member

Откуда: Урал
Сообщений: 919
iap, спасибо, прочла!

kDnZP, получается индекс не возможен? ну что ж... зато поле создалось :)
31 май 11, 15:52    [10739732]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Статусы зло, если их применять неглядя.
Отбирайте данные согласно логике. Статусы можно оставить клиентскому приложению, и по запрошенному статусу пусть сработает соответствующая ветка фильтра.

Т.е. если с клиента приходит:
  • дай "архивные", то фильтр будет: Status = 2 AND DateDoc >= DateAdd(Day,13,GetDte())
  • дай "выплаченные", то фильтр будет: Status = 2
  • дай "выплаченные но не архивные", то фильтр будет: Status = 2 AND DateDoc < DateAdd(Day,13,GetDte())
  • дай "не выплаченные", то фильтр будет: Status = 1
  • дай "просроченные", то фильтр будет: Status = 1 AND DateDoc < DateAdd(Day,7,GetDte())
    В идеале и поля Status не должно быть, а что-то типа Registered, Paid.

    Если кто-то говорит, что статусы удобнее, т.к. сразу отражают смысл логики. То это отчасти.
    Частенько Часто Повально логика пересекается и тогда одним полем не обойтись или будет ужасно неудобно и неэффективно указывать набор статусов, эквивалентных по текущему смыслу. А заодно при расширении системы их нужно согласовывать, а это пересмотр всей системы, а не только зависимых модулей.
  • 1 июн 11, 10:56    [10743513]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    zvezda_t
    Member

    Откуда: Урал
    Сообщений: 919
    Mnior,

    а если с клиента приходит:
    # дай "все" и на против укажи каким он является
    ("архивным" или "выплаченным" или "выплаченным но не архивным" или "не выплаченным" или "просроченным")?
    1 июн 11, 15:04    [10746058]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    SomewhereSomehow
    Member

    Откуда: Moscow
    Сообщений: 2480
    Блог
    zvezda_t,

    тут вам придет на помощ например оператор case, в ктором вы можете прописать любую логику отображения статуса в зависимости от сочетания значений полей, как пример
    declare @t table(id int identity, Status int, DateDoc datetime)
    insert into @t values (2, '20100101'),(2, '20110101'), (1, '20100101'), (1, '20110101')
    select 
    	*,
    	Status = (case 
    		when Status = 1 and  DateDoc < '20110101' then 'выплачен (архивный)'
    		when Status = 1 and  DateDoc >= '20110101' then 'выплачен (текущий)'
    		when Status = 2 and  DateDoc < '20110101' then 'неоплачен (архивный)'
    		when Status = 2 and  DateDoc >= '20110101' then 'неоплачен (текущий)'
    		else 'неожиданный какой-то статус' end
    	)
    from @t
    я еще давно вам предлагал
    SomewhereSomehow
    Или вообще никакого поля не делать, а вычислять это непосредственно в запросе.
    1 июн 11, 15:19    [10746236]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6724
    zvezda_t
    а если с клиента приходит:
    # дай "все" и на против укажи каким он является
    ("архивным" или "выплаченным" или "выплаченным но не архивным" или "не выплаченным" или "просроченным")?
    View наше всё.
    Не надо путать логическую модель и физическую структуру хранения. Тем более забывать об этом.
    1 июн 11, 16:52    [10747311]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    zvezda_t
    Member

    Откуда: Урал
    Сообщений: 919
    поняла! спасибо вам, что научили :)
    2 июн 11, 07:16    [10749874]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    zvezda_t
    Member

    Откуда: Урал
    Сообщений: 919
    Всем привет!
    Скажите пожалуйста, а можно сделать так, чтоб вычисляемое поле формировалось в зависимости от полей другой таблицы?
    22 июн 11, 15:10    [10854924]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    Гавриленко Сергей Алексеевич
    Member

    Откуда:
    Сообщений: 37254
    zvezda_t
    Всем привет!
    Скажите пожалуйста, а можно сделать так, чтоб вычисляемое поле формировалось в зависимости от полей другой таблицы?
    Ну, функцию в него запихать (вроде можно). Но лучше так не делать.
    22 июн 11, 15:12    [10854951]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    SomewhereSomehow
    Member

    Откуда: Moscow
    Сообщений: 2480
    Блог
    zvezda_t,

    конечно, вот например
    create table t (a int, b int, c as a*b)
    insert into t select 2,2
    insert into t select 4,4
    select * from t
    22 июн 11, 15:12    [10854954]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    SomewhereSomehow
    Member

    Откуда: Moscow
    Сообщений: 2480
    Блог
    SomewhereSomehow,

    пардон! другой таблицы. невнимательноп прочитал!
    22 июн 11, 15:13    [10854965]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    zvezda_t
    Member

    Откуда: Урал
    Сообщений: 919
    Гавриленко Сергей Алексеевич
    Ну, функцию в него запихать (вроде можно). Но лучше так не делать.

    Почему? Долго работать будет?
    22 июн 11, 15:18    [10855028]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    iap
    Member

    Откуда: Москва
    Сообщений: 47142
    zvezda_t
    Гавриленко Сергей Алексеевич
    Ну, функцию в него запихать (вроде можно). Но лучше так не делать.

    Почему? Долго работать будет?
    Скорее да, чем нет. Это ведь будет выполняться вызов скалярной функции для каждой строки.
    Скалярная функция сама по себе - редкостный тормоз!
    А внутри функции каждый раз запрос из другой таблицы.
    Но и поддерживать такого монстра будет трудно, особенно непосвящённому.
    Это ведь очень глубоко зарытая неявная связь между таблицами получается.
    А если таких полей Вы наделаете десятка два-три?
    22 июн 11, 15:22    [10855087]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6724
    zvezda_t
    Скажите пожалуйста, а можно сделать так, чтоб вычисляемое поле формировалось в зависимости от полей другой таблицы?
    Индексированное представление как альтернативный вариант.
    22 июн 11, 21:59    [10858086]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
    Все форумы / Microsoft SQL Server Ответить