2012-01-09 70 views
4
DECLARE @myXml XML 

SET @myXml = CONVERT(xml, '<a key="2"></a>', 1) 

SELECT s.value('@key', 'VARCHAR(8000)') AS myKey from @myXml.nodes('/a') t(s) 

答案:SQL Server XQuery在一行中?

enter image description here

這是罰款。

我想要這樣做,而不聲明@myXml變量。

喜歡的東西:

SELECT 
    s.value('@key', 'VARCHAR(8000)') AS myKey 
FROM 
    CONVERT(xml, N'<a key="2"></a>', 1) .nodes('/a') t(s) 

,但我得到一個錯誤:

enter image description here

回答

2

你可以這樣做:

Select CONVERT(xml, N'<a key="2"></a>', 1).value('a[1]/@key', 'varchar(8000)') 
+0

爲什麼是[1]? – 2012-01-09 16:27:38

+0

@Royi Namir:這將您限制在根下的'a'標記的一個實例。如果您想要多個實例(如果您的真實XML字符串比您的示例中的實際XML字符串更復雜),您將需要一種與您的第一個示例(以及我的,下面的示例)相同的方法來實際碎化XML。如果只有一個'a'標籤,kd7的方法肯定會更快。 – mwigdahl 2012-01-09 16:40:09

1

這應該工作:

;WITH xgen (xdata) 
AS 
(
    SELECT CONVERT(xml, '<a key="2"></a>', 1) AS xdata 
) 
select s.value('@key', 'VARCHAR(8000)') AS myKey 
from xgen 
    cross apply xgen.xdata.nodes('/a') t(s)