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

Sql server 是否可以使用SQL Server或SSIS解析此XML文件?,sql-server,xml,xml-parsing,ssis,Sql Server,Xml,Xml Parsing,Ssis,我从一个名为MDM的金融数据提供商那里收到了一个XML文件。它显示了我下载的股息。它包括股息率、日期和请求的证券等信息 我曾尝试使用XML源和合并联接使用SSIS解析此问题。我还尝试了使用开放式XML的SQL Server 2012,但没有成功。我从Youtube、谷歌和搜索板上收集了这些技术。我的目标是以一种易于阅读的表格格式,这样我就可以看到哪些证券收到了股息信息 当我试图用SSIS解析它时,给出了以下输出名称 FIELD SECURITY APP_PARAM MDM_MESSAGE XM

我从一个名为MDM的金融数据提供商那里收到了一个XML文件。它显示了我下载的股息。它包括股息率、日期和请求的证券等信息

我曾尝试使用XML源和合并联接使用SSIS解析此问题。我还尝试了使用开放式XML的SQL Server 2012,但没有成功。我从Youtube、谷歌和搜索板上收集了这些技术。我的目标是以一种易于阅读的表格格式,这样我就可以看到哪些证券收到了股息信息

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

FIELD
SECURITY
APP_PARAM
MDM_MESSAGE
XML文件太大,无法完全发布在这里,但我已经包含了一个Dropbox链接,希望它能正常工作。希望有人能帮忙。我不确定这个文件是否可以解析,尽管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
试试这个-

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'

您需要从这个XML中提取哪些信息(哪些节点、哪些属性)?我想获取SYM_类型_ID、SEC_符号、SEC_类型_ID、日期、汇率、付款金额、清洗金额、费率。这很接近,但它最终运行了两个单独的查询,以及两个单独的网格结果集。还有,我如何将它指向已保存的xml文件,而不是在查询中包含文件的全部内容?我尝试更改这一行SELECT@XML='c:\xmlfiles\parse_file.XML',但没有成功。如果删除第一条SELECT语句,它似乎可以正常工作。我只是通过联合保持后面两个的结合。如果可能的话,我仍然希望将它指向一个实际的xml文件。谢谢。德瓦特,谢谢。这很有用。最后一个问题。如何添加where子句,使其对给定字段更具选择性?例如,我尝试了t.c.exist('FIELD')=0和SEC_Symbol='57636Q104'的位置,但这不起作用?很好,它起作用了。最后一个问题。您是如何构建此查询的?是否有一个开发工具可以帮助您构建它,或者您是通过查看xml文件来编写整个过程的?我已将问题标记为已回答。我使用最适合我的需要并允许我解决所有专业任务的方法。