문제
저장된 절차의 결과를 사용하여 테이블 열을 업데이트하고 싶습니다.
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을 반환합니다.
제휴하지 않습니다 StackOverflow