我开始输入这个问题,显然我所需要的只是与某人讨论。谢谢你成为我不知情的耳朵。当我完成上面的最后一个问题时,我之前在搜索中读到的东西点击了,我找到了答案。
ELSE
BEGIN
DECLARE @EmailPart VARCHAR(8000)
DECLARE @CurrentText VARCHAR(8000)
DECLARE @CurrentPosition BIGINT = 0
WHILE @CurrentPosition < len(@EmailBody)
BEGIN
SET @EmailPart = SUBSTRING(@EmailBody + CHAR(13), @CurrentPosition, 8000)
SET @CurrentText = left(@EmailPart, Len(@EmailPart) - PatIndex('%' + CHAR(13) + CHAR(10) + CHAR(13) + '%', REVERSE(@EmailPart)))
SET @CurrentPosition = @CurrentPosition + len(@CurrentText)
EXEC .dbo.spSendMail @to = @EmailList
,@cc = @AppCCList --rfc 1/16/15
,@subj = 'Ordering Issues'
,@body = @EmailBody
END
END
所以,让我们把它分解一下。
给我我想要处理的文本块。最多 8000 个字符 刚刚意识到 + CHAR(13) 可能需要放在 SUBSTRING 的外部,但我稍后会担心。你明白了……
SET @EmailPart = SUBSTRING(@EmailBody + CHAR(13), @CurrentPosition, 8000)
现在我已经处理了不超过 8000 个字符的限制,让我们得到最后一个换行符。CHAR(13) 和 CHAR(10) 是换行符和回车符。(我不记得哪个是哪个自动取款机,但 Google 会。)
left(@EmailPart, Len(@EmailPart) - PatIndex('%' + CHAR(13) + CHAR(10) + CHAR(13) + '%', REVERSE(@EmailPart)))
这是找到最后一个换行符的魔法,在这种情况下是双换行符,因为它在我的源数据中看起来更好。
PatIndex('%' + CHAR(13) + CHAR(10) + CHAR(13) + '%', REVERSE(@EmailPart))
我们在已反转的 8000 个字符字符串中找到换行符和回车符模式的索引。
这给了我们索引从字符串末尾开始的字符数。然后我们用字符串的长度减去该索引来从字符串的前面找到索引。
Len(@EmailPart) - PatIndex(/*snipped for clarity*/)
一旦我们有了它。我只取左边的 x 字符,其中 x 是上述差异的结果。
left(@EmailPart, Len(@EmailPart) - PatIndex(/*snipped for clarity*/))
其余的只是跟踪您拍摄了多少个角色并循环播放主体。
希望这对某人有用。