zoukankan      html  css  js  c++  java
  • SQL xml 1

    DECLARE @xml XML = '
    <Devs>
       <lang name="VB.NET"/>
       <lang name="C#.NET"/>
       <lang name="Java" />
       <lang name="Javascript" />
       <lang name="ASP.NET" />
    </Devs>
    '
    SELECT lang = L.n.value('(.)','NVARCHAR(MAX)')
    FROM @xml.nodes('/Devs/lang/@name') L(n)
    WHERE L.n.value('(.)','NVARCHAR(MAX)') LIKE '%v%'

    上面代码中的2行,可以写成L.n.value('(.)','NVARCHAR(MAX)') AS [lang],另外(.)代表的是'/Devs/lang/@name'属性的本身。
    谓词LIKE是用来检查字符或字段值是否与指定的模式(pattern)匹配。

    lang = L.n.value('(.)','NVARCHAR(MAX)')这里面的L和n各代表什么呢?
    前者为表,后者为列。可以参考notes的语法:nodes (XQuery) as Table(Column)

    动态的T-SQL:
    宣告三个变量,第一个为@nodes :
    DECLARE @nodes NVARCHAR(MAX) = '''/Devs/lang/@name'''
    第二个为@value:
    DECLARE @value NVARCHAR(MAX) = '''(.)'',''NVARCHAR(MAX)'''
    第三个为@sql,其实前两个变量也是为此变量所使用,查询LIKE的条件,本例中,也有所改变,即是查询所有值包含有".NET"。:
    DECLARE @sql NVARCHAR(MAX) = 'SELECT
        lang = L.n.value(' + @value +')
     FROM @xml.nodes(' + @nodes +') L(n)
     WHERE L.n.value(' + @value +') LIKE ''%.NET%'''
     使用sp_executesql 执行第三个变量:
     EXECUTE sp_executesql @sql, N'@xml xml', @xml = @xml

  • 相关阅读:
    Regexp
    Qt Customize QVariant
    Paradox
    Write File
    Division of Line Segment
    How to Get Vertical Line from Point and Line
    IOPS-百度百科
    磁盘的读写-想起了SGA PGA DBWR LGWR...
    记一次备份发起时间延后问题
    V$RMAN_BACKUP_JOB_DETAILS
  • 原文地址:https://www.cnblogs.com/shixinchao/p/2378916.html
Copyright © 2011-2022 走看看