2017-10-17 4 views
0

いくつかの古いカラムのデータを、同じテーブルの新しく作成されたカラムにコピーしたいとします。いくつかの列はbitであり、一部はtext(旧)からvarchar(新規)です。私が苦労しているのは、古い列にはヌルデータがあり、新しい列はnot nullです。古いデータがヌルの場合、新しいデータはヌル値ではなく、0または ''になります。ヌルデータをヌルでないカラムにコピーする

BEGIN TRY 
    BEGIN TRANSACTION 

    update tblProject 
     set 
      NewBitColumn1 = OldBitColumn1, 
      NewBitColumn2 = OldBitColumn2, 
      NewBitColumn3 = OldBitColumn3, 

      NewVarCharColumn1 = OldTextColumn1, 
      NewVarCharColumn2 = OldTextColumn2, 
      NewVarCharColumn3 = OldTextColumn3, 

     COMMIT TRAN -- Transaction Success 
    END TRY 
BEGIN CATCH 

     DECLARE @ErrorMessage NVARCHAR(4000) = ERROR_MESSAGE() 
     DECLARE @ErrorSeverity INT = ERROR_SEVERITY() 
     DECLARE @ErrorState INT = ERROR_STATE() 

    IF @@TRANCOUNT > 0 
     ROLLBACK TRAN --RollBack in case of Error 

    RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState) 
END CATCH 
+1

タグあなたが使用しているDBMS。そのコードは製品固有です。 – jarlh

+0

もっと重要なことに、やってはいけません!ヌル値を保つ!偽のヌルを格納するのは悪い考えです。 – jarlh

答えて

2

使用coalesce()

update tblProject 
    set 
     NewBitColumn1 = coalesce(OldBitColumn1, 0), 
     NewBitColumn2 = coalesce(OldBitColumn2, 0), 
     NewBitColumn3 = coalesce(OldBitColumn3, 0), 

     NewVarCharColumn1 = coalesce(OldTextColumn1, ''), 
     NewVarCharColumn2 = coalesce(OldTextColumn2, ''), 
     NewVarCharColumn3 = coalesce(OldTextColumn3, ''); 
関連する問題