2016-10-16 4 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이 비어있는 두 개의 행이 있습니다. 그래서 그것을 채울 기회가 있습니까? 그래서 결과는 이렇게 될 것입니다. 나는 그것을 내 나쁜 영어 죄송합니다

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 

내가 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 

을 생성하는 방법이를하고이 결과입니다. 정말 SQL 서버 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

감사합니다. '펜 '(별칭) 만 제거하면됩니다. – 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 )