문제

저장된 절차의 결과를 사용하여 테이블 열을 업데이트하고 싶습니다.

create procedure seq
as
DECLARE @NextValue INT;
INSERT SequencesTable DEFAULT VALUES;
DELETE SequencesTable WITH(READPAST); 
SELECT SCOPE_IDENTITY();
go

UDF는 Nodeterministic이기 때문에 사용할 수 없습니다. 이와 같은 것이 작동하지 않습니다

UPDATE [dbo].[t1]     SET [c1] = seq

나는 이것을 잘못된 방식으로 접근하고 있다는 느낌이 듭니다.

이렇게 보이는 테이블을 업데이트하고 싶어요

1 1
2 2
1 4
1 4
5 5
1 2

이렇게 보인다

1 1
2 2
3 4
4 4
5 5
6 2

도움이 되었습니까?

해결책

다음과 같은 것을 시도하십시오.

update a set c1 = c1_new
from (
  select 
    c1, c2
  , c1_new = row_number() over (order by nullif(c1,c1))
  from dbo.t1
  ) a

원하는 것을 얻을 때까지 내부 쿼리를 사용하여 업데이트를 적용하십시오.

Nullif (C1, C1)는 디스크에서 원래 순서를 보존하려고 시도합니다. 항상 NULL을 반환합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top