我有一个名为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
答案 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'