【问题标题】:sql from xquery need some explanation来自xquery的sql需要一些解释
【发布时间】:2016-02-25 07:23:13
【问题描述】:

我遇到了这行代码,对我来说没有任何意义

SELECT @cols = STUFF((
        SELECT ',' + QUOTENAME(DateT)
        FROM cico
        GROUP BY DateT
        ORDER BY DateT
        FOR XML PATH('')
            ,TYPE
        ).value('.', 'NVARCHAR(MAX)'), 1, 1, '')

我知道for xml path('')是创建从select语句返回的结果集的xml结构

但是(select ....,TYPE).value(....) 是什么

上面的行只是将TYPE 分配给(select..., ) 仅括号。它不是一个功能。换句话说就是这样select .... ,TYPE

另一个让我难以理解的事情是我们为什么要为括号(...).value(...)赋值

【问题讨论】:

  • @TT。我知道我已经读过了。但我的问题是这个查询是如何正确的(选择....,类型)。值(..)。为什么要为 select 语句赋值什么使用,type

标签: sql sql-server sql-server-2008 sql-server-2012 xquery


【解决方案1】:

类型
指定查询以 xml 类型返回结果。


SQL Server 对 xml (Transact-SQL) 的支持使您可以选择通过指定 TYPE 请求将 FOR XML 查询的结果作为 xml 数据类型返回> 指令。这允许您在服务器上处理 FOR XML 查询的结果。

SELECT ... FRO XML PATH(''), TYPE 将返回xml,然后您可以在其上使用.value() 等xquery 方法。
请注意,如果不使用TYPE,您的查询将返回错误:

无法调用 nvarchar(max) 上的方法。

因为您不能对 nvarchar(max) 结果使用 xquery 方法。

【讨论】:

  • 你可以为东西的参数添加细节吗?为什么我们要通过1,1,''
  • STUFF ( character_expression , start , length , replaceWith_expression ) => 并且在您的查询中将删除第一个 ',' ;)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多