1

select ステートメント (select top 1...) に行がない場合、このステートメントはエラーになります。

update tHomePageWorking 
set nColumn = 2, 
    nPosition = ((select top 1 nPosition 
                  from tHomePageWorking 
                  where nColumn = 2 
                  order by nPosition desc) + 1
                 ) 
where nPosition = 1 and nColumn = 1

このステートメントのカウントをテストし、レコードが見つからない場合はデフォルトで 1 にする方法はありますか?

select top 1 nPosition 
from tHomePageWorking 
where nColumn = 2 
order by nPosition desc
4

3 に答える 3

1

COALESCE 関数が問題を解決すると思います。null 以外の最初の引数を返します。

update tHomePageWorking 
set nColumn = 2, 
    nPosition = COALESCE (
                 ((select top 1 nPosition 
                  from tHomePageWorking 
                  where nColumn = 2 
                  order by nPosition desc) + 1
                 ) 
                 ,1)
where nPosition = 1 and nColumn = 1
于 2012-08-10T09:05:35.730 に答える
0

一つの方法は

declare @nposition int
set @nposition=(select top 1 nPosition 
                      from tHomePageWorking 
                      where nColumn = 2 
                      order by nPosition desc)
  update tHomePageWorking 
    set nColumn = 2, 
        nPosition = (coalesce(@nposition,0) + 1) 
    where nPosition = 1 and nColumn = 1
于 2012-08-10T09:02:26.950 に答える
0
declare @pos int;
select @pos=(select top 1 nPosition 
                  from tHomePageWorking 
                  where nColumn = 2 
                  order by nPosition desc)
select @pos=ISNULL(@pos,0)+1;

update tHomePageWorking 
set nColumn = 2, 
    nPosition = @pos 
where nPosition = 1 and nColumn = 1
于 2012-08-10T09:05:59.330 に答える