2017-02-14 3 views
0

I은 ​​간단한 테이블 가지고여러 열을 업데이트 할 때 순서를 업데이트하는 열은 무엇입니까?

Col001 
Col002 
... 
ColNNN 
... 
Col001_DateTimeModified 
Col002_DateTimeModified 
... 
ColNNN_DateTimeModified 

ColXXX 들고 값과 ColNNN_DateTimeModified는 대응하는 날짜 및 시간 값이 수정 된 (삽입 또는 갱신)를 잡고있다.

한 열의 값이 업데이트되면 해당 행의 모든 ​​열 값이 사용됩니다. 새로운 열이 업데이트 된 경우에만 수정 시간 열을 업데이트하고 싶습니다. 그래서, 내가 가진 :

UPDATE MyTable 
SET Col001 = S.[Col001] 
    ,Col002 = S.[Col002] 
    ,... 
    ,Col001_DateTimeModified = IIF(Col001 = S.[Col001], Col001_DateTimeModified, GETUTCDATE()) 
    ,Col002_DateTimeModified = IIF(Col002 = S.[Col002], Col002_DateTimeModified, GETUTCDATE()) 
    ,... 
FROM MyTable T 
INNER JOIN NewData S 
    ON T.[id] = S.[id] 

나는 확신 할 수 있습니다, 행 Col001_DateTimeModified = IIF(Col001 = S.[Col001], Col001_DateTimeModified, GETUTCDATE()) 평가 될 때 Col001는 여전히 원래의 값을 보관 유지하는 것이 아니라 Col001 = S.[Col001] 행 실행 후 값?

+1

SQL Server가 관점에서 한 번에 열을 업데이트하지 않는 것입니다. 전체 업데이트 문을 하나의 문으로 실행합니다. –

답변

2

예. 값은 순차적으로 업데이트되지 않지만 한꺼번에 업데이트됩니다. 예 : 값이 순서대로 업데이트되고 있었다 경우

create table #test (x int, y int, z int) 

insert into #test values (1,2,3) 

update #test 
set y= x + z, z= iif(y=2,100,200) 
where x=1 

select * from #test 

x y z 
1 4 100 

가, Z의 값이 200

+0

더 간단한 예제는'create table #test (x int, y int); # 테스트 값 (1,2)에 삽입; #test set y = x, x = y; select * from #test; ' –

+0

@MartinSmith 나는 OP 자신의 코드와 비슷한 예를 들었다. – cloudsafe