2012-04-21 60 views
3

我輸入的是SQL Server表像這樣的XML列:轉換XML

<word Entry="Ketab" Affix="miyanvand" Pos="esm" Derv="Jamed" /> 

所需的輸出:像這樣的表:

Entry | Affix  | Pos  | Derv 
Ketab | miyanvand | esm  | Jamed 

回答

4

如果您正在使用sql-server 2005+。那麼,也許是這樣的:

DECLARE @xml XML= 
'<word Entry="Ketab" Affix="miyanvand" Pos="esm" Derv="Jamed" />' 

SELECT 
    Y.ID.value('(@Entry)[1]', 'Varchar(100)') as [Entry], 
    Y.ID.value('(@Affix)[1]', 'Varchar(100)') as [Affix], 
    Y.ID.value('(@Pos)[1]', 'Varchar(100)') as [Pos], 
    Y.ID.value('(@Derv)[1]', 'Varchar(100)') as [Derv] 
FROM @xml.nodes('/word') as Y(ID) 

或者你也可以做這樣的:

DECLARE @xml XML= 
'<word Entry="Ketab" Affix="miyanvand" Pos="esm" Derv="Jamed" />' 

SELECT 
    @xml.value('(/word/@Entry)[1]', 'varchar(50)') as Entry, 
    @xml.value('(/word/@Affix)[1]', 'varchar(50)') as Affix, 
    @xml.value('(/word/@Pos)[1]', 'varchar(50)') as Pos, 
    @xml.value('(/word/@Derv)[1]', 'varchar(50)') as Derv 

或者,如果你有一個表。然後是這樣的:

DECLARE @tbl TABLE(ID INT,someXML XML) 
INSERT INTO @tbl 
VALUES 
    (1,'<word Entry="Ketab" Affix="miyanvand" Pos="esm" Derv="Jamed" />') 

SELECT 
    tbl.ID, 
    Y.ID.value('(@Entry)[1]', 'Varchar(100)') as [Entry], 
    Y.ID.value('(@Affix)[1]', 'Varchar(100)') as [Affix], 
    Y.ID.value('(@Pos)[1]', 'Varchar(100)') as [Pos], 
    Y.ID.value('(@Derv)[1]', 'Varchar(100)') as [Derv] 
FROM 
    @tbl AS tbl 
    CROSS APPLY someXML.nodes('/word') as Y(ID) 
2

可以使用value功能的XML列:

declare @t table (col1 xml) 
insert @t values ('<word Entry="Ketab" Affix="miyanvand" />') 

select t.col1.value('(/word/@Entry)[1]', 'varchar(50)') as Entry 
,  t.col1.value('(/word/@Affix)[1]', 'varchar(50)') as Affix 
from @t t