2016-10-16 18 views
0

良い日、私はテーブルを更新しようとしています。私のウェブサイトにはエラーがあったためです。まず私のテーブルをチェックしてください。 (Penilaian Header)複数の行を更新するSQL Server 2008

IdPenilaian | KodePenilaian  | Nip | PositionCode | Total 
    1613   -----    1603405 P028   0 
    1618   -----    1602999 P028   0 
    1641   PE0001568   603060 P040   35 
    1640   PE0001567   1411862 P007   35 

ご覧のとおり、 KodePenilaianが空の2つの行があります。だから、それを埋めるチャンスはありますか?結果はこのようになります。

私は KodePenilaian

select case 
    when right(max(KodePenilaian),7) is null then 'PE0000001' 
    else ('PE' + RIGHT('0000000' + cast(right(max(KodePenilaian),7) + 1 as nvarchar),7)) 
    end KodePenilaian from Penilaian_Header 

を生成し、ここで私はそれを私の悪い英語のため申し訳ありません

KodePenilaian 
    PE0001569 

おかげで、実行したときにそこに結果がどのように

IdPenilaian | KodePenilaian  | Nip | PositionCode | Total 
    1613   PE0001570   1603405  P028   0 
    1618   PE0001569   1602999  P028   0 
    1641   PE0001568   603060 P040   35 
    1640   PE0001567   1411862 P007   35 

これ。実際のSQL Server 2008に使用されていません

答えて

1

は このような何かを試してみてください:あなたのテーブルでNULLある

update Penilaian_Header pen 
    set pen.KodePenilaian = 
      (select case 
        when right(max(newKode.KodePenilaian),7) is null then 'PE0000001' 
        else ('PE' + RIGHT('0000000' + cast(right(max(newKode.KodePenilaian),7) + 1 as nvarchar),7)) 
        end KodePenilaian 
       from Penilaian_Header newKode) 
where pen.KodePenilain = NULL 

-----場合

あなたがこの方法を試すことができます
+0

ありがとうございました。 'pen'(エイリアス)を削除するだけです。 – YVS1102

0

...

;WITH cte 
AS (SELECT *, 
    MAX(CONVERT(int, REPLACE(KodePenilaian, 'PE000', ''))) OVER() AS MaxNum, 
    ROW_NUMBER() OVER (ORDER BY kodePenilaian) AS rn 
FROM YourTable) 
UPDATE cte SET KodePenilaian = concat('PE000', maxnum + rn) 
    WHERE KodePenilaian IS NULL 

あなたのテーブル

create table YourTable (
IdPenilaian int, KodePenilaian varchar(20), Nip int, PositionCode varchar(10), Total INT) 

insert into YourTable 
(IdPenilaian , KodePenilaian  , Nip , PositionCode , Total) values 
    ( 1613  ,  NULL   ,  1603405 ,'P028',   0 ) 
    ,( 1618  ,  NULL   ,  1602999 ,'P028',   0 ) 
    ,( 1641  , 'PE0001568' ,  603060 ,'P040',   35 ) 
    ,( 1640  , 'PE0001567' ,  1411862 ,'P007',   35 ) 
関連する問題