2017-10-17 48 views
0

我想将某些旧列中的数据复制到同一个表中的一些新创建的列中。一些列是bit和一些text(旧)到varchar(新)。我遇到的困难是旧列中有一些空数据,而新列是not null。我该如何做到这一点,以便如果旧数据为空,那么新数据会得到一个非空值,可以是0或'',具体取决于。将NULL数据复制到列中不为空

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

标签您正在使用的数据库管理系统。该代码是特定于产品的。 – 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, '');