Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查SQL Server表中是否已经存在XML字符串项?_Sql_Sql Server_Xml_Select_Insert - Fatal编程技术网

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

如何检查SQL Server表中是否已经存在XML字符串项?,sql,sql-server,xml,select,insert,Sql,Sql Server,Xml,Select,Insert,我有一个较长的存储过程,其中一个输入参数是包含关键字/标记的xml字符串(使用SQL Server 2008格式化为xml)。我需要检查这些标记中的每一个是否已经存在于表中,如果不存在,则将它们插入表中 到目前为止,我有以下几行代码,但我的问题是如何在这里编写Where子句(@tag只是一个用于演示的占位符)。我该如何改变这一点 我的SQL(仅相关部分): IF NOT EXISTS ( SELECT * FROM RC_Tags WHERE

我有一个较长的存储过程,其中一个输入参数是包含关键字/标记的xml字符串(使用SQL Server 2008格式化为
xml
)。我需要检查这些标记中的每一个是否已经存在于表中,如果不存在,则将它们插入表中

到目前为止,我有以下几行代码,但我的问题是如何在这里编写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
你可以在你的查询中这样使用它-

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

而且不需要添加if条件。

这是完美的-正是我想要的。非常感谢-我会尽快接受。:)