簡體   English   中英

檢查xml節點中是否存在值

[英]Check if value exists in xml node

我有以下XML

    <?xml version="1.0"?>
    <ArrayOfInt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="id">
        <int>984026</int>
        <int>1005222</int>
    </ArrayOfInt>

我將其傳遞給具有XML參數的存儲過程。

我想從xml文檔返回ID在int節點中的所有行

    SELECT * FROM
    MyTable
    WHERE
    MyTable.Id IN @XMLDoc.value('(.)[1]', 'int')

僅當我在xml中發送一個int時這才有效

    <?xml version="1.0"?>
    <ArrayOfInt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="id">
        <int>984026</int>
    </ArrayOfInt>

但是,如果我使用兩個int節點運行此命令,則sql將節點連接在一起

The conversion of the nvarchar value '9840261005222' overflowed an int column.
    declare @XMLDoc xml = '<?xml version="1.0"?>
           <ArrayOfInt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="id">
               <int>984026</int>
               <int>1005222</int>
           </ArrayOfInt>'

    ;WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema-instance' as xsi ,
                'id' as ns2,
                DEFAULT 'id')
    SELECT MT.* 
    FROM MyTable
    join @XMLDoc.nodes('/ArrayOfInt/int') T(z) 
    on MT.ID = T.z.value('.','int')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM