是的。 CTE是答案。請試試這個。
WITH cte_base AS(SELECT ID
, 1 AS IDLN
, LTRIM(RTRIM(Notes)) AS Notes
, 1 AS Rownum
FROM yourtable
), cte_re AS (SELECT Id
, IDLN
, 1 AS StartPos
, CAST(60 - CHARINDEX(' ', REVERSE(LEFT(SUBSTRING(Notes, 1, 60) + ' ', 60))) AS INT) StringLen
FROM cte_base
WHERE Rownum =1
UNION ALL
SELECT r.Id
, r.IDLN + 1
, StartPos + StringLen + 1
, CAST(60 - CHARINDEX(' ', REVERSE(LEFT(SUBSTRING(b.Notes, StartPos + StringLen + 1, 60) + ' ', 60))) AS INT)
FROM CTE_re r
INNER JOIN cte_base b
ON b.Id = r.Id and b.rownum = 1
WHERE StartPos + StringLen <= DATALENGTH(b.Notes)
)
SELECT r.Id
, r.IDLN
, UPPER(SUBSTRING(b.Notes, r.StartPos, r.StringLen)) AS Notes
FROM cte_re r
INNER JOIN cte_base b
ON r.Id = b.Id;
恕我直言,你正在使數據存儲和數據檢索比他們需要更難。 SQL服務器可以處理長文本,並且如果它全部在一個記錄中,在應用程序中讀取和解析它會容易得多。 –
完全同意你,仁 - 不幸的是,應用程序正在推動這個解決方案,因爲它是爲了處理多行項目,每行長度不超過60個字符。 – chaseman1973