40 ~ 50 列のすべての varchar 列を持つテーブルがあり、それらのデータに従ってトリムしてクレンジングを行いたいと考えています。(一部の列には数値データと日付データが含まれる場合があります)。
各列の個々の更新を書き留めるのが面倒だったので、ユーザー定義関数を作成しました。
列名と識別子 (DataType) を渡すと、「強化された」値が返されます。
したがって、1回の更新で、私は書きます
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