私は2つのテーブルを持っています。キーと値のペアを含むもの。テキスト内のキーのすべてのインスタンスを対応する値に置き換える必要がある varchar 列を含むその他の列。
動作するカーソルを使用して、ストアド プロシージャでこれを実装しました。しかし、可能な限り効率的に実行するには、ストアド プロシージャが必要です。私の最初の考えは、カーソルを削除することです。それは可能ですか?おそらく再帰的なcteを使用していますか?以下に例を示します。
設定
DECLARE @Dictionary TABLE
(
WordKey NVARCHAR(255),
WordValue NVARCHAR(4000)
)
INSERT INTO @Dictionary
VALUES
('[key1]', 'Value1'),
('[key2]', 'Value2'),
('[key3]', 'Value3')
DECLARE @Phrasings TABLE
(
Phrasing1 NVARCHAR(4000),
Phrasing2 NVARCHAR(4000),
Phrasing3 NVARCHAR(4000)
)
INSERT INTO @Phrasings
VALUES
('[key1]','random text','random text'),
('random text','random [key2] text','random text'),
('random text [key1]','random [key2] text','random [key1] [key3] text')
メインクエリ
DECLARE @WordKey NVARCHAR(255)
DECLARE @WordValue NVARCHAR(max)
DECLARE parsing_cursor CURSOR FOR
SELECT WordKey,WordValue FROM @Dictionary
OPEN parsing_cursor
FETCH NEXT FROM parsing_cursor
INTO @WordKey, @WordValue
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE @Phrasings SET
Phrasing1 = REPLACE(Phrasing1, @WordKey, @WordValue),
Phrasing2 = REPLACE(Phrasing2, @WordKey, @WordValue),
Phrasing3 = REPLACE(Phrasing3, @WordKey, @WordValue)
FETCH NEXT FROM parsing_cursor
INTO @WordKey, @WordValue
END
CLOSE parsing_cursor
DEALLOCATE parsing_cursor
期待される結果
Phrasing1 Phrasing2 Phrasing3
^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^
"Value1" "random text" "random text"
"random text" "random Value2 text" "random text"
"random text Value1" "random Value2 text" "random Value1 Value3 text"