如何检查SQL Server表中是否已存在XML字符串项?

时间:2014-09-22 09:42:24

标签: sql sql-server xml select insert

我有一个较长的存储过程,其中一个输入参数是一个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

1 个答案:

答案 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)')
        )

并且无需添加条件。