是的。 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