我有一个表,它有 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