2013-10-28 56 views
1

以下內容將正常工作。但是,我要動態地讀它沒有屬性或coulmn命名如何在選擇語句中不提及屬性名稱的情況下從xml值中獲取值

示例XML

declare @xmlval xml='<ArrayOfCustomers> 
    <Customer> 
     <ItemId>1</ItemId> 
     <Value>Mr Smith</Value> 
    </Customer> 
    <Customer> 
     <ItemId>2</ItemId> 
     <Value>Mr Bloggs</Value> 
    </Customer> 
</ArrayOfCustomers>' 

樣品查詢

SELECT 
    Cust.value('(ItemId)[1]', 'int') AS 'ItemID', 
    Cust.value('(Value)[1]', 'Varchar(50)') AS 'Customer Name' 
FROM 
    @xmlval.nodes('/ArrayOfCustomers/Customer') AS AOC(Cust) 

上述工作正常。如何在不提及select語句中的屬性名稱的情況下從xml值中獲取值。

--Required查詢樣本格式 對於如:

SELECT 
    Cust.value('[0][1]', 'int') AS 'ItemID', 
    Cust.value('[1][1]', 'Varchar(50)') AS 'Customer Name' 

SELECT 
    Cust.value('[1]', 'int') AS 'ItemID', 
    Cust.value('[1]', 'Varchar(50)') AS 'Customer Name' 
FROM 
    @xmlval.nodes('/ArrayOfCustomers/Customer') AS AOC(Cust) 

在我們的情況下,我不知道該列或屬性名稱的輸入@xmlval值。我想插入XML值插入到新表(INT,VARCHAR(50))

感謝, Velsankar

回答

0

您可以通過[2]通過*選擇所有元素,然後通過[1]獲得第一和第二:

select 
    Cust.value('*[1]', 'int') AS 'ItemID', 
    Cust.value('*[2]', 'Varchar(50)') AS 'Customer Name' 
from @xmlval.nodes('/ArrayOfCustomers/Customer') as AOC(Cust) 

sql fiddle demo

+0

感謝。當列數或列數未知時是否可以獲取值? – Velsankar

+0

動態SQL有可能,但你想得到什麼輸出?通常從SQL Server返回動態列數是個壞主意 –

+0

我會在表列中得到一個xml值。我必須將它作爲表格返回。每行可能有不同的xml值。所以在執行時只有我知道列數及其屬性名稱。請告知如何獲取值如表 – Velsankar

相關問題