我有一张表有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