2

我有一个表,它有 40-50 列,都是 varchar,我想根据其中的数据对它们进行修剪和清理。(某些列可能包含数字和日期数据)。

我懒得为每一列写下单独的更新,所以我创建了一个用户定义的函数。

我向它传递了一个列名和一个标识符(DataType)——它返回给我“丰富的”值。

所以在一次更新中,我写

UPDATE TABLE
SET
column1 = function(column1, datatype)
column2 = function(column2, datatype)
WHERE <my filter condition>.

但是,这很慢。我想知道是否有更好的方法来做到这一点。

这是功能:

    create function [dbo].[fn_Polaris_EnrichColumnToTargetDatatype] 
    (@ColumnName varchar(max), @Datatype varchar(max))
    returns varchar(max)
Begin
    Declare @EnrichedValue varchar(max);
    select @EnrichedValue = LTRIM(RTRIM(@ColumnName));

    if(@Datatype in ('Numeric', 'Decimal')) 
        BEGIN
            select @EnrichedValue = Replace(@EnrichedValue,',','');
            select @EnrichedValue = REPLACE(@EnrichedValue,'*','');
            select @EnrichedValue = REPLACE(@EnrichedValue,'$','');

            if (@EnrichedValue = '-' or len(@EnrichedValue) = 0 or @EnrichedValue is null or @EnrichedValue like '%[eE]%')
                begin
                    select @EnrichedValue = '0'
                end
            return @EnrichedValue
        END
    if(@Datatype in ('String', 'Varchar'))
        BEGIN
            select @EnrichedValue = REPLACE(@EnrichedValue, '"', '');
            return @EnrichedValue
        END
    return @EnrichedValue;
end
4

0 回答 0