【问题标题】:Applying XML cross apply to get data from XML file应用 XML 交叉应用从 XML 文件中获取数据
【发布时间】:2015-01-11 14:08:25
【问题描述】:

我正在应用 XML 交叉应用以使用存储过程从具有多个节点的 XML 项目文件中提取数据。
存储过程如下

INSERT INTO UCDetails
SELECT 
Usecase.value('@UserID','VARCHAR(100)') AS UCId, --ATTRIBUTE 
Usecase.value('@Name','VARCHAR(100)') AS UCName, --ATTRIBUTE 
Usecase.value('@PmAuthor','VARCHAR(100)') AS UCActor, --ATTRIBUTE 
UCPrecon.value('@Value','VARCHAR(MAX)') AS UCPre, --ATTRIBUTE 
UCPostcon.value('@Value','VARCHAR(MAX)') AS UCPost, --ATTRIBUTE 


FROM
@xml.nodes('/Project/Models/UseCase')AS TAB(Usecase) OUTER  
apply @xml.nodes('/Project/Models/UseCase/TaggedValues/TaggedValueContainer/ModelChildren/TaggedValue[5] ')AS TAB1(UCPrecon)OUTER  
apply @xml.nodes('/Project/Models/UseCase/TaggedValues/TaggedValueContainer/ModelChildren/TaggedValue[6]')AS TAB2(UCPostcon)

END

我得到的是交叉乘法行,而不是只得到一行数据,如下所示

UCId UCName UCActor UCPre UCPost UC01 登录 Bilal Haider 用户必须已注册 用户已成功登录 UC01 登录 Bilal Haider 用户必须注册 用户已添加 UC01 Login Bilal Haider 用户登录成功 用户登录成功 UC01 Login Bilal Haider 用户登录成功 用户已添加 UC02 添加用户 Bilal Haider 用户必须注册 用户登录成功 UC02 添加用户 Bilal Haider 用户必须已注册 添加用户 UC02 添加用户 Bilal Haider 用户登录成功 用户登录成功 UC02 添加用户 Bilal Haider 用户登录成功 用户添加

很抱歉发布这样的结果 正确的行以粗体突出显示,但为什么我得到所有其他行?

XML 文件链接: XML FILE

【问题讨论】:

  • 你能把xml fileexpected output发帖吗
  • 亲爱的我如何附加 XML 文件?善意的指导和预期的输出在上表中用粗体突出显示
  • 亲爱的我已经发布了XML文件mediafire.com/?g2ad95t3bbhvzdh你可以从这个链接下载它

标签: sql-server xml stored-procedures store cross-apply


【解决方案1】:

不要对TaggedValues 使用交叉应用。请改为在 values 子句中指定 xPath。

select T.X.value('@UserID', 'varchar(100)'),
       T.X.value('@Name', 'varchar(100)'),
       T.X.value('@PmAuthor', 'varchar(100)'),
       T.X.value('(TaggedValues/TaggedValueContainer/ModelChildren/TaggedValue)[5]/@Value', 'varchar(max)'),
       T.X.value('(TaggedValues/TaggedValueContainer/ModelChildren/TaggedValue)[6]/@Value', 'varchar(max)')
from @xml.nodes('/Project/Models/UseCase') as T(X)

结果

------ ---------- ------------- ------------------------------ ------------------------------
UC01   Login      Bilal Haider  User must be Registerd         User is Loggined sucessfully
UC02   Add User   Bilal Haider  User is Loggined sucessfully   User is added

【讨论】:

  • 我怎样才能做出一个与上表 Post 条件和其他用例的 Pre 条件相匹配的 sql 语句?
  • @BILALHAIDER 您应该在网站上提出一个新问题,在该网站上描述您想要什么、您尝试过什么以及如何不适合您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多