应用 XML 交叉应用以从 XML 文件获取数据
Applying XML cross apply to get data from XML file
我正在应用 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 文件 link:
XML FILE
不要对 TaggedValues
使用交叉应用。改为在值子句中指定 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
我正在应用 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 文件 link: XML FILE
不要对 TaggedValues
使用交叉应用。改为在值子句中指定 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