【发布时间】:2014-07-20 16:13:57
【问题描述】:
有没有办法将Cross Apply 与MERGE 语句一起使用?我是Cross Apply 的新手,但仍在尝试找出所有技巧。这是我在包含 XML 节点的单元格上执行的 INSERT 和 UPDATE 的模拟演示:
UPDATE NewTable
SET
NewTable.ID = ID,
NewTable.Title = Parent.Elm.value('(Title)[1]', 'varchar(100)'),
NewTable.[Description] = Parent.Elm.value('(Description)[1]', 'varchar(100)'),
NewTable.ChildTitle = Child.Elm.value('(ChildTitle)[1]', 'varchar(100)'),
NewTable.StartDate = Child.Elm.value('(StartDate)[1]', 'DATETIME'),
NewTable.EndDate = Child.Elm.value('(EndDate)[1]', 'DATETIME')
FROM OldTable
cross apply
xmlFieldData.nodes('/ParentElement') xp(parent)
cross apply
xp.parent.nodes('ChildElement') xc(child)
WHERE OldTable.ID = NewTable.ID
INSERT INTO NewTable(ID, Title, [Description], ChildTitle, StartDate, EndDate )
SELECT
Parent.Elm.value('(Title)[1]', 'varchar(100)') AS 'Title',
Parent.Elm.value('(Description)[1]', 'varchar(100)') AS 'Description',
Child.Elm.value('(ChildTitle)[1]', 'varchar(100)') AS 'ChildTitle',
Child.Elm.value('(StartDate)[1]', 'DATETIME') AS 'StartDate',
Child.Elm.value('(EndDate)[1]', 'DATETIME') AS 'EndDate'
FROM OldTable
cross apply
xmlFieldData.nodes('/ParentElement') Parent(Elm)
cross apply
Parent.Elm.nodes('ChildElement') Child(Elm)
这是我的 XML 文件中的内容:
<ParentElement>
<Title>parent1</Title>
<Description />
<ChildElement>
<Title>Child 4</Title>
<Description />
<StartDate>2010-01-25T00:00:00</StartDate>
<EndDate>2010-01-25T00:00:00</EndDate>
</ChildElement>
<ChildElement>
<Title>Child1</Title>
<Description />
<StartDate>2010-01-25T00:00:00</StartDate>
<EndDate>2010-01-25T00:00:00</EndDate>
</ChildElement>
<ChildElement>
<Title>Child6</Title>
<Description />
<StartDate>2010-01-25T00:00:00</StartDate>
<EndDate>2010-01-25T00:00:00</EndDate>
</ChildElement>
</ParentElement>
我在 MERGE 语句中遇到的问题是将交叉应用放在“使用”部分的位置:
MERGE INTO NewTable AS NewTable
USING OldTable
cross apply
xmlFieldData.nodes('/ParentElement') xp(parent)
cross apply
xp.parent.nodes('ChildElement') xc(child)
WHERE OldTable.ID = NewTable.ID AND Child.Elm.value('(ChildTitle)[1]', (100)') = ChildTitle
感谢您的帮助!
【问题讨论】:
标签: sql sql-server xml merge