将XML文件中的三个值组合成一个

时间:2014-05-08 12:14:18

标签: sql-server

我在将.xml文件中的数据加载到SQL Server数据库时遇到问题。到目前为止,我一直在使用此查询:

 BEGIN 
    DECLARE @XML AS XML,@hDoc AS INT
    SELECT @XML = CONVERT(XML, BulkColumn) 
    FROM OPENROWSET(BULK 'D:\order2.xml', SINGLE_BLOB) AS x;

    EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML

    INSERT  INTO [dbo].[Client]
    SELECT *
    FROM OPENXML(@hDoc, 'orderType/client')

    WITH
    (
         OrderId varchar(200) '../../../sn',
         Client_number varchar(200) 'client_number',
         FirstName varchar(200) 'firstname', 
         LastName varchar(200) 'lastname', 
         E-Mail varchar(200) 'email'   
    )

   EXEC sp_xml_removedocument @hDoc   

END

但现在我想在一列中选择client_numberfirstnamelastname,所以它看起来像这样:

|     Client      |
| - - - - - - - - |
|  134 John Smith |  

我真的很感谢你的帮助,我为凌乱的代码道歉,因为这是我在这里的第一个问题,在stackoverflow上。 谢谢!

1 个答案:

答案 0 :(得分:0)

我现在没有系统可以尝试,但可能您可以使用CTE从XML中提取值并将它们合并到主查询中,例如

WITH XMLVal AS (
  SELECT *
  FROM OPENXML(@hDoc, 'orderType/client')
  WITH (OrderId varchar(200) '../../../sn',
        Client_number varchar(200) 'client_number',
        FirstName varchar(200) 'firstname', 
        LastName varchar(200) 'lastname', 
        E-Mail varchar(200) 'email'   
  )
)
INSERT  INTO [dbo].[Client]
SELECT *, concat(Client_number, ' ', FirstName, ' ', LastName)
FROM   XMLVal

我不确定SQLServer是否会喜欢WITH中的第二个CTE