1
我有示例XML看起來是這樣的:查詢不返回正確的結果 - SQL服務器的Xquery
<tst:Root xmlns:tst="http://tempuri.org/some.xsd" SchemaVersion="0.2.1234.12345" RevNumber="1">
<tst:stuff someID="1">This is <tst:comment>1st.</tst:comment> what I <tst:comment>2nd</tst:comment>just want to show</tst:stuff>
</tst:Root>
我怎麼能只返回「這是我只是想表明」?
這是表格和我試過的。
CREATE TABLE [dbo].[XmlTable](
[XmlId] [int] IDENTITY(1,1) NOT NULL,
[XmlDoc] [xml] NOT NULL,
CONSTRAINT [PK_XmlTable] PRIMARY KEY CLUSTERED
(
[XmlId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[XmlTable] ON
INSERT [dbo].[XmlTable] ([XmlId], [XmlDoc]) VALUES (1, N'<tst:Root xmlns:tst="http://tempuri.org/some.xsd" SchemaVersion="0.2.1234.12345" RevNumber="1"><tst:stuff someID="1">This is <tst:comment>1st.</tst:comment> what I <tst:comment>2nd</tst:comment>just want to show</tst:stuff></tst:Root>')
SET IDENTITY_INSERT [dbo].[XmlTable] OFF
和我曾嘗試:
這一個只返回「這是」符合市場預期。
--WITH XMLNAMESPACES (Default 'http://tempuri.org/some.xsd')
--SELECT
-- a.value('text()[1]', 'nvarchar(100)') as SampleXml
-- From
-- XmlTable As x
-- Cross Apply XmlDoc.nodes('Root/stuff') a(a)
這一個是返回的一切:「這是第一次我2ndjust想顯示」
WITH XMLNAMESPACES (Default 'http://tempuri.org/some.xsd')
SELECT
a.value('.', 'nvarchar(100)') as SampleXml
From
XmlTable As x
Cross Apply XmlDoc.nodes('Root/stuff') a(a)
我怎樣才能排除註釋節點,但仍然得到正確的結果?
編輯:
我想這樣的回報吧:
是否有更簡單的方法來做到這一點比下面
WITH XMLNAMESPACES (Default 'http://tempuri.org/some.xsd')
SELECT
a.value('text()[1]', 'nvarchar(100)') + a.value('text()[2]', 'nvarchar(100)') + a.value('text()[3]', 'nvarchar(100)') as SampleXml
From
XmlTable As x
Cross Apply XmlDoc.nodes('Root/stuff') a(a)
感謝您的答覆,我想把它當作單排不是3!我能夠通過我發佈的更新後的查詢得到它,我只是想知道是否有更好的方法!這似乎不是最好的方法。 Upvoted爲良好的迴應。再次感謝! – user1307149
它可能比你做得更簡單。假設你的XML文檔是記錄中的一個字段,你根本不需要使用交叉應用(除非你想做其他你沒有提到的事情)。查看我的更新答案的例子。 –
感謝您的幫助! – user1307149