Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 在字典中查找下一个标记_Sql Server_Dictionary_Xquery_Xquery Sql - Fatal编程技术网

Sql server 在字典中查找下一个标记

Sql server 在字典中查找下一个标记,sql-server,dictionary,xquery,xquery-sql,Sql Server,Dictionary,Xquery,Xquery Sql,在SQLServer表中有一个XML字段,我需要知道表中是否已经使用了一对具有给定键和给定值的键/值 这是我的桌子(简化)。 dbo.mytable: 主密钥,INT xml_数据,不为空 xml_数据字段用以下XSN表示: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xsd:element name="a"> &

在SQLServer表中有一个XML字段,我需要知道表中是否已经使用了一对具有给定键和给定值的键/值

这是我的桌子(简化)。
dbo.mytable:
主密钥,INT
xml_数据,不为空

xml_数据字段用以下XSN表示:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xsd:element name="a">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:restriction base="xsd:anyType">
                    <xsd:sequence>
                        <xsd:element name="b" type="NonEmptyString" />
                        <xsd:element name="c" type="NonEmptyString" />
                        <xsd:element name="d" type="NonEmptyString" />
                        <xsd:element name="e" type="xsd:dateTime" />
                        <xsd:element name="dict">
                            <xsd:complexType>
                                <xsd:complexContent>
                                    <xsd:restriction base="xsd:anyType">
                                        <xsd:choice maxOccurs="unbounded">
                                            <xsd:sequence>
                                                <xsd:element name="key" type="NonEmptyString" />
                                                <xsd:element name="value" type="xsd:string" />
                                            </xsd:sequence>
                                        </xsd:choice>
                                    </xsd:restriction>
                                </xsd:complexContent>
                            </xsd:complexType>
                        </xsd:element>
                    </xsd:sequence>
                    <xsd:attribute name="version" type="xsd:float" />
                </xsd:restriction>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:simpleType name="NonEmptyString">
        <xsd:restriction base="xsd:string">
            <xsd:minLength value="1" />
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema>
参考资料:
考虑以下答案:
以及下列文件:

以下是我的问题的XQuery:
数据(/a/dict/value[.>>(/a/dict/key[.=“myKey”])[1]])[1]

以下是我问题的答案:

SELECT COUNT(primaryKey) FROM dbo.mytable
WHERE [xml_data].value('
 data(/a/dict/value[. >> (/a/dict/key[. = "myKey"])[1]])[1]
', 'varchar(max)') = 'myValue'
请注意,此答案仅适用于找到的“myKey”对应的第一个键。
对我来说就是这样

也考虑到这个答案:
可以通过以下方式对查询进行参数化:

DECLARE @key AS NVARCHAR(max)
DECLARE @value AS NVARCHAR(max)

SET @key = N'myKey'
SET @value = N'myValue'

SELECT COUNT(primaryKey) FROM dbo.mytable
WHERE [xml_data].value('
    data(/a/dict/value[. >> (/a/dict/key[. = sql:variable("@key")])[1]])[1]', 'varchar(max)
    ') = @value
SELECT COUNT(primaryKey) FROM dbo.mytable
WHERE [xml_data].value('
 data(/a/dict/value[. >> (/a/dict/key[. = "myKey"])[1]])[1]
', 'varchar(max)') = 'myValue'
DECLARE @key AS NVARCHAR(max)
DECLARE @value AS NVARCHAR(max)

SET @key = N'myKey'
SET @value = N'myValue'

SELECT COUNT(primaryKey) FROM dbo.mytable
WHERE [xml_data].value('
    data(/a/dict/value[. >> (/a/dict/key[. = sql:variable("@key")])[1]])[1]', 'varchar(max)
    ') = @value