将列传递给用户定义的函数SQL

时间:2013-02-27 12:03:46

标签: sql-server-2008 user-defined-functions

我有一张表有40-50列,所有varchar,我想根据它们中的数据修剪并做一些清理。 (某些列可能包含数字和日期数据)。

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

我将一个列名称传递给它和一个Identifier(DataType) - 它返回给我“Enriched”值。

所以在一次更新中,我写了

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

0 个答案:

没有答案