データが区切られた列を含むデータがあります。基本的に同じ列に複数のレコードがあります。
A0434168.A2367943.A18456972.A0135374.A0080362.A0084546.A0100991.A0064071.A0100858
この列のデータを別のテーブルの別々の行に分割しようとしています。値は可変長で、ピリオドで区切られています。カーソルを使用して、このデータのルックアップ テーブルを作成しようとしています。データ量が多いため、カーソルが不当に遅くなります。
私のカーソルは次のようになります。
DECLARE @ptr nvarchar(160)
DECLARE @aui nvarchar(15)
DECLARE @getmrhier3 CURSOR
SET @getmrhier3 = CURSOR FOR
SELECT cast(ptr as nvarchar(160)),aui
FROM mrhier3
FORWARD_ONLY
OPEN @getmrhier3
FETCH NEXT
FROM @getmrhier3 INTO @ptr, @aui
WHILE @@FETCH_STATUS = 0
BEGIN
if(len(@ptr) > 0)
begin
if(charindex('.',@ptr) > 0)
begin
insert into mrhierlookup(hieraui,aui)
values (substring(@ptr,0,charindex('.',@ptr)),@aui)
update mrhier3
set ptr = substring(@ptr,charindex('.',@ptr)+1,LEN(@ptr))
where aui = @aui
and ptr = @ptr
end
else
begin
insert into mrhierlookup(hieraui,aui)
values (@ptr,@aui)
update mrhier3
set ptr = ''
where aui = @aui
and ptr = @ptr
end
end
FETCH NEXT
FROM @getmrhier3 INTO @ptr, @aui
END
CLOSE @getmrhier3
DEALLOCATE @getmrhier3
カーソルの現在のバージョンは、列の先頭の値に対してのみ機能します。すべての長さは任意です。列の長さは最大で 150 文字です。
現在のデータセットでは、ルックアップ テーブルの作成に数日かかる可能性があります。数百万のレコードがあります。
結合操作をより迅速に実行するために、このデータを別のテーブルに効率的に (迅速に) 解析するより良い方法はありますか?