Обновление нескольких строк SQL Server 2008

#sql-server #sql-server-2008

#sql-сервер #sql-server-2008

Вопрос:

Добрый день, я пытаюсь обновить свою таблицу. Потому что на моем веб-сайте была ошибка (ошибки). сначала, пожалуйста, проверьте мой стол. (Penilaian_Header)

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

как вы можете видеть. Есть две KodePenilaian пустые строки. Так есть ли шанс заполнить его? таким образом, результат будет таким.

 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
 

и вот результат, когда я его запускаю

 KodePenilaian
  PE0001569
 

Спасибо, извините за мой плохой английский.

Ответ №1:

На самом деле не привык к sql server 2008 Попробуйте что-то вроде этого:

 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
 

если ----- NULL в вашей таблице

Комментарии:

1. его рабочее спасибо. Просто нужно удалить pen (псевдоним)

Ответ №2:

Вы можете попробовать этот способ…

 ;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  )