Mam jeden stół z 2 kolumnami. Nazywa się "HourandDate" i jest typem DATETIME, a drugi nazywany jest "Statusem" i jest typu INT. Chcę, aby wartość w kolumnie "Status" została zaktualizowana na "1", gdy datetime serwera osiągnie tę samą wartość datetime zapisaną Int kolumnę "Houranddate".

Czy jest jakaś szansa, że ustawię to w SQL Server MS lub jedynym sposobem, aby korzystać z niektórych usług internetowych?

1
Mário Tomé 15 luty 2017, 15:54

2 odpowiedzi

Najlepsza odpowiedź

W SQL Server możesz użyć kolumny obliczonej:

alter table t
    add new_status as (case when datetimecol >= getdate() then 1 else status end);

(A, co zrobił w tym przypadku nazwać istniejącą kolumnę coś w rodzaju _status i nowa status.)

Jeśli status jest przed tym czasem, a następnie upuść istniejącą kolumnę status i zamiast tego:

alter table t
    add status as (case when datetimecol >= getdate() then 1 else 0 end);

Obliczona kolumna jest obliczana, gdy jest używana. Tak więc jest zawsze na bieżąco, bez użycia zadań lub update.

2
Gordon Linoff 15 luty 2017, 13:19

Możesz użyć zaplanowanego zadania SQL Agent, ale nie poleciłbym tego. Lepiej poradzić sobie z takimi rzeczami w instrukcji SELECT:

SELECT houranddate, case when houranddate > getdate() then 1 else [status] end as [status]
FROM tablename
1
Zohar Peled 15 luty 2017, 12:58