2016-06-15 194 views
2

我從一個SQL字符串中獲取數據,使XML文件,這裏是我的SQL刪除XML標記

SELECT [data] AS data 
FROM MyTable 
WHERE [Status] = '1' 
FOR XML PATH('DataLocation') 

這裏是我的XML返回

<DataLocation> 
    <data>String</data> 
</DataLocation> 

問題我已經是我想要的標籤DataLocation但不是標籤data,我只想顯示String值。

我哪裏錯了?

+0

如果有多個匹配行,你想要什麼? – AakashM

+0

@AakashM我不需要標記我只需要值「字符串」我只想要的是標記 – Nonagon

回答

1

列的名稱用作xml標籤。幸運的是,如果你有一個不明確的或空的(據我記憶)列名稱,將不會有XML標籤。

所以這應該工作:

SELECT [data] AS '' 
FROM MyTable 
WHERE [Status] = '1' 
FOR XML PATH('DataLocation') 

如果沒有,試試這個:

SELECT [data] 
FROM MyTable 
WHERE [Status] = '1' 
FOR XML PATH('DataLocation') 
+0

這不起作用,但它給了我一個很好的邏輯來尋找和更好的理解。謝謝編輯:heres錯誤 - 列名''包含FOR XML所要求的無效XML標識符; – Nonagon

1

從你的評論,你真正想要的是一個DataLocation標籤內的單個字符串值。因此,所有你需要的是

SELECT data AS DataLocation 
FROM MyTable 
WHERE Status = '1' 
FOR XML PATH ('') 

需要注意的是,如果你的表中有多個匹配行,你會得到多個DataLocation標籤輸出;您可以使用額外的, ROOT('whatever')以根元素包圍這些標記。

0

也許你正在尋找?

DECLARE @MyTable TABLE(Data NVARCHAR(256), [Status] NVARCHAR(10)) 
INSERT INTO @MyTable(Data, [Status]) 
VALUES ('String', '1'), ('String1', '1'), ('String2', '1'), ('String3', '1'), ('String4', '2') 

SELECT STUFF((SELECT ' ' + Data FROM @MyTable WHERE [Status] = '1' FOR XML PATH('')), 1, 1, '') AS DataLocation FOR XML PATH('') 

結果

<DataLocation>String String1 String2 String3</DataLocation> 
3

有幾種方法導致同樣的結果。所有的人都存在微小的商品和劣品:

DECLARE @tbl TABLE(Data NVARCHAR(100), [Status] INT) 
INSERT INTO @tbl(Data, [Status]) VALUES 
('test 1 with 1', 1) 
,('test 1 with 2', 2) 
,('test 2 with 1', 1); 

SELECT [data] AS [*] 
FROM @tbl 
WHERE [Status] = 1 
FOR XML PATH('DataLocation'); 

SELECT [data] AS [node()] 
FROM @tbl 
WHERE [Status] = 1 
FOR XML PATH('DataLocation'); 

SELECT '' + [data] --Any kind of computation results in "no caption name" 
FROM @tbl 
WHERE [Status] = 1 
FOR XML PATH('DataLocation') 

SELECT [data] AS DataLocation 
FROM @tbl 
WHERE [Status] = 1 
FOR XML PATH('') 

小背景:如果有一列名會被使用。所以你必須找到擺脫這個專欄名稱的方法,或者用你想要的名稱替換它。