是否可以使用SQL Server或SSIS解析此XML文件?

时间:2013-06-20 04:34:06

标签: sql-server xml xml-parsing ssis

我有一个名为MDM的财务数据提供商收到的XML文件。它显示了我下载的股息。它包括股息率,日期和要求的安全性等信息。

我尝试使用XML源和Merge Join使用SSIS解析它。我也尝试过使用Open XML的SQL Server 2012,但是无法做到。我从Youtube收集了这些技术,google并搜索了这个主板。我的目标是以易于阅读的表格格式,以便我可以看到哪些证券收到了股息信息。

当我尝试使用SSIS解析它时,给出了以下输出名称

FIELD
SECURITY
APP_PARAM
MDM_MESSAGE

XML文件太大了,无法在此完全发布,但我已经包含了一个希望有效的Dropbox链接。希望有人可以提供帮助。我不确定这个文件是否可以解析XML。

https://dl.dropboxusercontent.com/u/29851290/parse_file.xml

理想情况下,输出将是这样的。

SYM_TYPE_ID   SEC_SYMBOL  SEC_TYPE_ID FOR DATE    EX_DT    PAY_DT     WASH_AMOUNT      RATE TICKER           
aapl          csus        (Not sure)  5/15/2013   6/1/2013 (Not Sure)    0.25

1 个答案:

答案 0 :(得分:3)

试试这个 -

DECLARE @XML XML
SELECT @XML = CONVERT (XML, [BulkColumn])
FROM OPENROWSET (BULK N'C:\parse_file.xml', SINGLE_BLOB) [XmlData]

SELECT PROV_ID = t.c.value('../@PROV_ID', 'VARCHAR(25)') 
     , SYM_TYPE_ID = t.c.value('../@SYM_TYPE_ID', 'VARCHAR(25)')
     , SEC_SYMBOL = t.c.value('../@SEC_SYMBOL', 'VARCHAR(25)')
     , SEC_TYPE_ID = t.c.value('../@SEC_TYPE_ID', 'VARCHAR(25)')
     , LOCAL_NAME = t.c.value('@LOCAL_NAME', 'VARCHAR(25)')
     , FOR_DATE = t.c.value('@FOR_DATE', 'DATETIME')
     , FIELD = t.c.value('.', 'VARCHAR(25)')
FROM @XML.nodes('root/MDM_MESSAGE[2]/SECURITY/FIELD') t(c)
WHERE t.c.value('@SEC_SYMBOL', 'VARCHAR(25)') = '57636Q104'

UNION ALL

SELECT PROV_ID = t.c.value('@PROV_ID', 'VARCHAR(25)') 
     , SYM_TYPE_ID = t.c.value('@SYM_TYPE_ID', 'VARCHAR(25)')
     , SEC_SYMBOL = t.c.value('@SEC_SYMBOL', 'VARCHAR(25)')
     , SEC_TYPE_ID = t.c.value('@SEC_TYPE_ID', 'VARCHAR(25)')
     , LOCAL_NAME = NULL
     , FOR_DATE = NULL
     , FIELD = NULL
FROM @XML.nodes('root/MDM_MESSAGE[2]/SECURITY') t(c)
WHERE t.c.exist('FIELD') = 0
     AND t.c.value('@SEC_SYMBOL', 'VARCHAR(25)') = '57636Q104'