如何解决无循环如何从XML节点将值插入表
我有以下要求。
我有一个值的XML变量。
我现在应该将此XML变量的值插入到表(表A)中,但是需要检查XML变量中的项(一个接一个)是否已经存在于另一个表(表B)中,并且计数表B中存在的单个项目中只有一个。
如果表B中不止一次/不存在,请不要插入主表-表A。
如何在不使用循环的情况下实现这一目标。
Declare @Names xml
set @Names ='<List><CNames>One</CNames><CNames>Two</CNames></List>'
**When used below xml variable of values become a column of values :**
SELECT tbl.colname.value('text()[1]','varchar(10)') AS CN
FROM @Names ('/List/CNames') tbl(colname);
CN
-------
One
Two
表B中的现在-必须检查是否存在“一个”和“第二”项,如果存在,则它们仅出现一次。
使用while循环虽然效果不错,但希望实现无循环。
解决方法
由于您已经可以选择要评估的行(在我的解决方案中为@values
),因此我从这里开始。
样本数据
-- existing table and data
declare @data table
(
CN nvarchar(10)
);
insert into @data (CN) values
('One'),('Three'),('Three');
-- new values extracted from XML
declare @values table
(
CN nvarchar(10)
);
insert into @values (CN) values
('One'),-- exists 1x and will be inserted
('Two'),-- does not exist and will not be inserted
('Three'); -- exists 2x and will not be inserted
解决方案
insert into @data (CN)
select v.CN
from @values v
cross apply ( select count(1) as 'Cnt'
from @data d
where d.CN = v.CN ) c
where c.Cnt = 1;
结果
select d.CN
from @data d
order by d.CN;
CN
----------
One
One --> new inserted value
Three
Three
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。