Transact-SQLの仕様はよくわからないので、一般的なSQLで
SQL
1create table tbl(no1 int,no2 int,Name varchar(10),KBN int);
2insert into tbl values(10,10,'あ',1),(20,21,'い',1),(30,30,'え',9),(48,45,'お',1),(50,50,'さ',9),(60,68,'た',1);
3
ここでno1が20から31に変わるので、no1の範囲を20~31で検索すればよいことになります
トランザクションやテンポラリテーブルなどつかえるのであればよいのですが
まず
SQL
1select (select count(*)+1 from tbl as t2 where t2.no1<t1.no1 and t2.no1 between 20 and 31) as rank,KBN from tbl t1 where no1 between 20 and 31 order by no1 asc;
2
でランク付けしたKBNの値を得ておき
SQL
1update tbl set no1=31 where no1=20;
2select (select count(*)+1 from tbl as t2 where t2.no1<t1.no1 and t2.no1 between 20 and 31) as rank,KBN from tbl t1 where no1 between 20 and 31 order by no1 asc;
3
no1をupdateした上で、再度おなじSQLデータをえます。
今回のケースですと、1,9が9,1になっているので「変化する」とわかります
目で見比べるのでなければ、それぞれをテンポラリテーブルに保管しておいて
rankとKBNのが完全に合致する状態でJOINしてcountし
データ件数があっているかどうかでチェックができます。
トランザクションができるならテスト後にrollbackすれば元にもどります