Это должно, по крайней мере, начать вас.Это грязно, потому что у вас есть многоуровневые замены, и JOIN
не вводите сами данные.
При этом используются два CROSS JOIN
и несколько строковых функций, поэтому будет * 1005.* очень неэффективно. Это никогда не будет работать быстро на большом наборе данных.
DECLARE @names table (id int, names varchar(100))
DECLARE @sent table (id int, descr varchar(1000))
INSERT INTO @names
VALUES
(1, 'Fox'),
(2, 'Narwhal'),
(3, 'Moon')
INSERT INTO @sent
VALUES
(1, 'The <1> jumped over the <2>.'),
(2, 'The <2> sailed to the <3>.')
SELECT DISTINCT Filtered
FROM (SELECT Replace(REPLACE(descr, '<' + CAST(n.id as varchar) + '>', n.names), '<' + CAST(n2.id as varchar) + '>', n2.names) Filtered
FROM @sent s, @names n, @names n2) x
WHERE Filtered NOT LIKE '%<%'