Tsql SQL Server:如何在匹配区域时自定义合并
请参阅使用merge语句从XML插入或更新表的代码Tsql SQL Server:如何在匹配区域时自定义合并,tsql,Tsql,请参阅使用merge语句从XML插入或更新表的代码 drop table if exists Student Declare @Data xml set @Data= '<Root> <Student> <Name>Rakesh</Name> <Marks>80</Marks> </Student>
drop table if exists Student
Declare @Data xml
set @Data=
'<Root>
<Student>
<Name>Rakesh</Name>
<Marks>80</Marks>
</Student>
<Student>
<Name>Mahesh</Name>
<Marks>90</Marks>
</Student>
<Student>
<Name>Gowtham</Name>
<Marks>60</Marks>
</Student>
<Student>
<Name>Manoj</Name>
<Marks></Marks>
</Student>
</Root>'
create table Student (
Name varchar(10),
Marks int
)
insert into Student values
('Rakesh',90),
('Mahesh',80),
('Jack',80),
('Manoj',57)
DECLARE @archive TABLE
(
ActionType varchar(10),
Name varchar(10),
Marks int
);
Merge into Student as Trg
Using (select d.x.value('Name[1]','varchar(20)') as Name ,
d.x.value('Marks[1]','int') as Marks from
@data.nodes('/Root/Student')as d(x)) as Src
on Trg.Name=Src.Name
When Matched Then update set
Trg.Marks=Src.Marks
when not matched then
insert (Name,Marks) values (Src.Name,Src.Marks)
OUTPUT
$action ,
inserted.*
INTO @archive;
我想当名称匹配,然后更新将执行,但当名称匹配,但标记是空的记录将被删除的基础上名称匹配
那么告诉我如何定制这个
请看我的XML,有一个名为Manoj的学生,他的分数为空,然后将根据匹配的名称从表中删除记录
我怎么能在合并中提到这样一个条件:当名称匹配且标记不为空时,更新;当名称匹配但标记为空时,记录将从表中删除
我可以使用多个匹配条件吗?如果是的话,这是可能的
请指导我如何做到这一点。谢谢您应该能够使用多个匹配部分,每个部分都带有子句搜索条件。一个搜索检查Src.Marks是否为零,另一个检查是否为零 我还对不匹配部分设置了子句搜索条件,因为我猜您也不希望插入没有标记的人
MERGE INTO Student as Trg
USING (
SELECT
d.x.value('Name[1]','varchar(20)') AS Name ,
d.x.value('Marks[1]','int') AS Marks
FROM
@data.nodes('/Root/Student') AS d(x)
) AS Src
ON Trg.Name=Src.Name
WHEN MATCHED AND Src.Marks <> 0 THEN
UPDATE
SET
Trg.Marks=Src.Marks
WHEN MATCHED AND Src.Marks = 0 THEN
DELETE
WHEN NOT MATCHED AND Src.Marks <> 0 THEN
INSERT (Name,Marks)
VALUES (Src.Name,Src.Marks)
OUTPUT
$action,
inserted.*
INTO @archive;
它可以进行删除。您只是在操作中输入了DELETE。先生,当找到匹配项时,我可以从那里更新/插入数据到另一个表中吗?请参阅示例代码。看看,告诉我它能用吗?使用Select*from T1 as Src ON Trg.Name=Src.Name(匹配时为Src.Name)和Src.Marks 0将学生合并为Trg,然后更新集合Trg.Marks=Src.Marks更新另一个表格1集合col=val1,其中插入另一个表格2COL1,col2值“a”,匹配时为'b',Src.Marks=0,不匹配时删除,Src.Marks 0,然后插入名称,标记值Src.Name,Src.Marks当我们将数据插入到表1中时,您能告诉我sql server在表上放置了什么样的锁吗。。。。在Begin Tran和Commit Tran中使用?