我有一个较长的存储过程,其中一个输入参数是一个xml字符串,其中包含关键字/标记(格式为xml
,使用SQL Server 2008)。我需要检查每个标签是否已经存在于表中,如果没有,请将它们插入那里。
到目前为止,我有以下几行,但我的问题是如何在这里编写Where子句(@tag
只是一个占位符用于演示)。我该如何更改?
我的SQL(仅相关部分):
IF NOT EXISTS
(
SELECT *
FROM RC_Tags
WHERE tag = @tag
)
BEGIN
INSERT INTO RC_Tags
(
tag
)
SELECT ParamValues.tag.value('.', 'varchar(255)')
FROM @xmlTags.nodes('/tags/tag') AS ParamValues(tag)
END
答案 0 :(得分:2)
您可以使用NOT EXISTS并在查询中使用它 -
INSERT INTO RC_Tags
(
tag
)
SELECT ParamValues.tag.value('.', 'varchar(255)')
FROM @xmlTags.nodes('/tags/tag') AS ParamValues(tag)
WHERE NOT EXISTS (
SELECT tag
FROM RC_Tags
WHERE tag = ParamValues.tag.value('.', 'varchar(255)')
)
并且无需添加条件。