--从一个成语开始接龙找到另一个成语 DECLARE @cb NVARCHAR(4)= '为所欲为' , @ce NVARCHAR(15)= '鸡飞狗跳'; WITH cte_get_path AS ( SELECT word , 0 AS is_recycle , CAST(word AS NVARCHAR(MAX)) AS cpath , 1 AS level , first_word , last_word FROM dbo.cy WHERE word = @cb UNION ALL SELECT s.word , CASE WHEN s.word = @ce THEN 1 ELSE 0 END AS is_recycle , CAST(p.cpath + '>' + s.word AS NVARCHAR(MAX)) AS cpath , p.level + 1 AS level , s.first_word , s.last_word FROM dbo.cy AS s INNER JOIN cte_get_path AS p ON p.last_word = s.first_word AND CHARINDEX(s.word, p.cpath) = 0 AND p.level + 1 <= 10--限制成语的个数为10个 AND p.is_recycle = 0 ) SELECT * FROM cte_get_path WHERE cte_get_path.word = @ce;