일괄 업데이트로 테이블의 일련 번호를 변경하고 싶습니다. 업데이트에 의해 주문이 포함되지 않았으므로 CTE, with 절을 사용하여 데이터 세트를 작성하고 결과에 대한 업데이트를 발행 했으므로 원하는대로 처리 할 것으로 예상됩니다.
하지만 ID로 업데이트 한 것은 주문한 세트가 아닙니다.
이 업데이트의 문제점은 무엇입니까?cte가 작동하지 않아 주문에 의한 업데이트가 필요한 이유는 무엇입니까?
CREATE TABLE [dbo].[Test](
[Id] [int] NOT NULL,
[Serial] [nvarchar](10) NOT NULL
)
insert into Test values
(1, 1001),
(2, 1002),
(3, 1003),
(4, 1004),
(5, 1005),
(6, 1006),
(7, 1003)
declare @serial int, @Id int
set @Id =3
select @serial = Serial from Test WHERE [email protected]
declare @new_serial nvarchar(10);
select @new_serial = cast(@serial as nvarchar(10));
;with Records as
(
Select Id, Serial
, ROW_NUMBER() over
(
order by serial
) as RN
FROM [Test]
where Id>@Id
)
UPDATE Records set
[Serial] = cast(@new_serial as int),
@new_serial = cast(@new_serial as int)+1
여기에 삽입 한 후 존재하는 것입니다 :
여기+--+----+
|1 |1001|
|2 |1002|
|3 |1003|
|4 |1004|
|5 |1005|
|6 |1006|
|7 |1003|
은 우리가 필요로하는 것입니다 :
+--+----+
|1 |1001|
|2 |1002|
|3 |1003|
|4 |1005|
|5 |1006|
|6 |1007|
|7 |1004|
가 왜 NVARCHAR –
으로 직렬 열이 이유는 무엇 단순히'UPDATE 테스트 SET [시리얼] = cast (int로 Serial) + 1 어디에서 Id> @ Id'? –
레코드는 cte 테이블이며 주어진 예제에서는 유지되지 않습니다. – Jayvee