这是我用来从 xml 中获取 5 位数字的存储过程:
CREATE PROCEDURE [dbo].[SP_KINGPRICE_InsertJournalFromPost]
(
@ResponseID bigint,
@TransactionDetailID bigint
)
AS
BEGIN
DECLARE @info as varchar(max) = '', @Reference as varchar(max) = ''
SET @info = (SELECT SUBSTRING(Response, CHARINDEX('<GlJournal>',Response) + 11,5)
FROM SysproIntegration..ifmTransactionDetailResponse
WHERE TransactionDetailResponseID = @ResponseID)
SET @Reference = (SELECT DISTINCT Reference
FROM GenJournalDetail
WHERE Journal = CAST(@info as DECIMAL(5,0)))
INSERT INTO ZJournalRecords
(JournalNumber,Reference)
VALUES (@info,@Reference)
END
XML 有一个这样的标签:
<GLJournal>12345</GLJournal>
如果 XML 文档只有这些标签之一,我不用担心。SP 工作正常。当有两个嵌套<GLJournal>
标签时,问题就出现了。xml 然后看起来像:
<GLJournal>
<SomeTag/>
<SomeTag2/>
<GLJournal>12345</GLJournal>
</GLJournal>
如何获取嵌套标签的 5 位值?(它总是 5 位数)我曾想过使用 try catch,但这似乎不是一个优雅的解决方案。
编辑:
另外,部分问题是,我不知道什么时候会有一个GlJournal
或两个标签。