एक्सएमएल पैटर्न के साथ मेरे लिए काम करता है आप दे
DECLARE @XmlTable TABLE (XmlResult XML)
INSERT INTO @XmlTable VALUES ('<books><book><title>GWTW</title></book></books>')
INSERT INTO @XmlTable VALUES ('<foo />')
INSERT INTO @XmlTable VALUES ('<books />')
SELECT
COUNT(*) AS BooksCount
FROM
(
SELECT XmlResult FROM @XmlTable
) AS XmlTable(XmlColumn)
CROSS APPLY XmlColumn.nodes('./books/book') XmlTableFunction(XmlColumn2);
मौजूद विधि भी काफी उपयोगी है: जैसे
DECLARE @XmlTable TABLE (XmlResult XML)
INSERT INTO @XmlTable EXECUTE [dbo].usp_GetBooks @EditionId=400
--select * from @XmlTable
SELECT
--Count number of nodes
COUNT(*) AS BooksCount
FROM
(
SELECT XmlResult FROM @XmlTable
) AS XmlTable(XmlColumn)
CROSS APPLY XmlColumn.nodes('./books/book') XmlTableFunction(XmlColumn2);
मेरे एक्सएमएल लग रहा है। मैं NULLIF का उपयोग शून्य करने के लिए 0 बदलने के लिए
SELECT COUNT(NULLIF(XmlResult.exist('./books/book'), 0)) FROM @XmlTable
संपादित करें, अद्यतन
एक्सएमएल आप पोस्ट भी गलत है के बाद (यह थोड़ा इसलिए योग के साथ कास्ट की आवश्यकता होगी है)।
आप सही ढंग से मूल नोट निर्दिष्ट नहीं कर रहे:
DECLARE @XmlTable TABLE (XmlResult XML)
INSERT INTO @XmlTable VALUES ('
<Version number ="1">
<books>
<book>
<name> </name>
<author></author>
</book>
<book>
<name> </name>
<author></author>
</book>
</books>
</Version>')
SELECT
COUNT(*)
FROM
(
SELECT XmlResult FROM @XmlTable
) AS XmlTable(XmlColumn)
CROSS APPLY XmlColumn.nodes('/Version/books/book') XmlTableFunction(XmlColumn2);
SELECT
COUNT(*)
FROM
(
SELECT XmlResult FROM @XmlTable
) AS XmlTable(XmlColumn)
CROSS APPLY XmlColumn.nodes('*/books/book') XmlTableFunction(XmlColumn2);
क्या क्या एक्सएमएल दिखता है? शून्य का मतलब है कि आप क्रॉस आवेदन से कोई पंक्ति नहीं ... – gbn
@gbn। जब मैं @XmlTable से * का चयन करता हूं, तो मैं संस्करण आईडी = 400 – BumbleBee
के लिए कम से कम 3 पुस्तक तत्व देखता हूं आपका एक्सएमएल नमूना मान्य नहीं है - पहले ' 'को' '(यह अभी नहीं है) के साथ बंद होना चाहिए, और '<संस्करण संख्या = 1>' मान्य नहीं है - 1 को उद्धरणों में होना आवश्यक है: '<संस्करण संख्या =" 1 ">' –