2017-02-15 8 views
1

2 개의 열이있는 테이블이 하나 있습니다. 하나는 "houranddate"라고하며 날짜 시간 유형이고 다른 하나는 "상태"라고하며 int 유형입니다. 서버 datetime이 "timeanddate"열에 저장된 동일한 datetime 값에 도달하면 "status"열의 값을 "1"로 업데이트하려고합니다.시스템 datetime이 datetime에 도달 할 때 다른 열에 저장된 열 값을 업데이트하는 방법? in sqlserver

SQL 서버 MS에서 이것을 설정할 수 있습니까, 아니면 유일한 방법은 일부 웹 서비스를 사용하는 것입니까?

+0

작업을 예약 할 수 있습니다. –

답변

2

SQL 서버에서는 계산 된 열 사용할 수 있습니다

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

(. 또는, 내가이 사건에서하는 것은 _status과 새로운 status 같은 기존의 열 뭔가를 이름)

을 그 시간 전에 0

status 경우 대신 기존 status 열과 드롭 :

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

계산 된 열은 사용될 때 계산됩니다. 따라서 항상 최신의 상태로 작업하거나 update을 사용하지 않아도됩니다.

+1

익명 downvote에 대한 이유가 무엇입니까? 이것은 OP가 원하는 것을위한 가장 간단한 솔루션 인 것 같습니다. –

+0

다른 사람이 투표를했다고 상상할 수있는 유일한 이유는이 칼럼을 색인 할 수 없기 때문입니다. 내 대답을 삭제하기 전에 같은 생각이 들었다. 나의 구문은'create table'을위한 것이고, 네가 더 적절 해 보였다. 내 upvote +1 – SqlZim

+0

고든 고마워. 그건 의미가 있습니다. 내 문제를 해결! –

1

SQL Agent 예약 작업을 사용하여이를 수행 할 수는 있지만 권장하지 않습니다. select 문에서 이러한 사항을 처리하는 것이 더 좋습니다.

SELECT houranddate, case when houranddate > getdate() then 1 else [status] end as [status] 
FROM tablename 
+0

쿼리에 의존하는 문제는 테이블을 탐색하는 다른 사람/응용 프로그램이 이전 상태 만 볼 수 있다는 것입니다. 나는 영업 사원이 테이블에 대한 모든 액세스가 동일한 데이터를 볼 수 있는지 확인하려고합니다. –

+0

@GordonLinoff는 매우 좋은 지적입니다. –