這個遞歸CTE
declare @input varchar(25)
set @input = 'SQL'
;WITH cte
AS (SELECT Stuff(@input, v.NUMBER, 1, '-') OUTPUT,
0 LEVEL
FROM MASTER..spt_values v
WHERE TYPE = 'P'
AND NUMBER BETWEEN 1 AND Len(@input)
UNION ALL
SELECT Stuff(cte.OUTPUT, v.NUMBER, 1, '-') OUTPUT,
cte.LEVEL + 1 AS LEVEL
FROM MASTER..spt_values v,
cte
WHERE TYPE = 'P'
AND cte.LEVEL + 1 < Len(@input)
AND NUMBER BETWEEN 1 AND Len(@input)) SELECT DISTINCT OUTPUT
FROM cte
UNION
SELECT @INPUT
ORDER BY OUTPUT
產生以下輸出
---
--l
-q-
-ql
s--
s-l
sq-
sql
我讓你投入的功能。
看到它在這個data.se query
+1工作,你得到的是,OP希望 – 2011-12-21 06:56:04
@ConradFrix順序輸出 - 訂單不是故意的:)。 – 2011-12-21 07:01:42
第二個答案是好的,但「示例」輸入字符串的時間爲28秒,第一個答案非常好,「示例」輸入字符串的時間爲0秒 – jozi 2011-12-21 09:07:49