sql-server - 如果 XML 具有重复的同名子元素,SSIS 将插入空值
问题描述
如果 XML 具有重复的同名子元素,SSIS 会将空值插入 DB。
示例 XML:
<Tests>
<TestId> 1 </TestId>
<TestName> Test 1 </TestName>
<TestId> 2 </TestId>
<TestName> Test 2 </TestName>
<TestLocation> Country </TestLocation>
</Tests>
谢谢,
解决方案
您希望获得的输出是什么?是这样的吗:
ElementName Value
TestId 1
TestName Test 1
TestId 2
TestName Test 2
TestLocation Country
或者
TestId TestName TestLocation
1 Test 2 Country
2 Test 1 NULL
请参见下面使用 T-SQL 从 XML 中提取数据的示例
DECLARE @T TABLE (x XML)
DECLARE @Out TABLE (ElementName varchar(100), [Value] varchar(1000))
INSERT INTO @T VALUES
(
'<Tests>
<TestId> 1 </TestId>
<TestName> Test 1 </TestName>
<TestId> 2 </TestId>
<TestName> Test 2 </TestName>
<TestLocation> Country </TestLocation>
</Tests>'
)
INSERT INTO @Out
SELECT q.t.value('local-name(.)', 'varchar(100)') ElementName,
q.t.value ('.', 'varchar(1000)') [Value]
FROM @T
CROSS APPLY x.nodes ('/Tests/*') q(t)
SELECT *
FROM @Out
SELECT [TestId], [TestName], [TestLocation]
FROM
(
SELECT ROW_NUMBER () OVER (PARTITION BY ElementName ORDER BY ElementName) Id , ElementName , [Value]
FROM @Out
) T
PIVOT
(
MIN([value]) FOR ElementName in ([TestId], [TestName], [TestLocation])
) pv
推荐阅读
- ios - 如何交互式收缩和增长 Table View Cell?
- c++ - 无法使用 Boost stacktrace + backtrace 获取行号
- javascript - Heroku 的 Websockets 在 chrome/firefox 上给出 404
- java - 谜语 for(... i++)
- json - 尝试在 Postgres 中插入 JSON 字段时出错
- sql-server - SSIS & SQL Server - 使用 SSIS 执行 SQL 任务在 SQL Server 中运行存储过程,然后将结果集返回到 SSIS 对象变量
- javascript - 重新渲染一个 React 组件
- python-3.x - Gtk.Application.run() 与 Gtk.main() Python3 中的最后机会异常处理
- javascript - 无法解决:地理编码未成功,原因如下:OVER_QUERY_LIMIT
- haskell - Nix GLFW Haskell 绑定缺少库?