Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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中使用for-xml_Sql_Sql Server 2008 - Fatal编程技术网

在sql中使用for-xml

在sql中使用for-xml,sql,sql-server-2008,Sql,Sql Server 2008,我有一个这样的代码用于连接多行中的值 输入: ID Name ------------- ---------------------- 1 Deepak Kumar Goyal 2 Niladri Biswas 2 Priyanka Sarkar 3 Sumi Girijan 3 Suresh Beldar 3 Je

我有一个这样的代码用于连接多行中的值

输入:

ID             Name
-------------  ----------------------
1              Deepak Kumar Goyal
2              Niladri Biswas
2              Priyanka Sarkar
3              Sumi Girijan
3              Suresh Beldar
3              Jeeva Baby
预期产出:

ID      Name
------- --------------------------------------------------
1       Deepak Kumar Goyal
2       Niladri Biswas OR Priyanka Sarkar
3       Sumi Girijan AND Suresh Beldar AND Jeeva Baby
使用的查询:

select ID, SUBSTRING(
(
select  ','+CAST(name AS VARCHAR)
from  @t a where a.ID = b.ID
FOR XML PATH('') 
),2,2000) as names
 from @t b group by id
查询成功运行。您能帮助我理解这里对xml的需求以及它的工作方式和原因吗?

这只是SQL Server中
FOR xml
子句的一种常见(错误)用法。SQL Server没有其他一些SQL实现(如MySQL)所具有的允许查询将多个字段聚合为单个字段的
group\u concat
功能

forxml
子句告诉服务器将结果行合并到一个XML文档中,它通过连接指定字段的值来实现这一点。在上面的查询中,您正在利用用于生成XML的字符串连接,并在此过程中添加逗号分隔符(显然不是XML)

简言之:这是一个黑客,但它工作得很好,被广泛使用


更多信息请参见此处:

如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(
{}
),以精确地格式化和语法突出显示它!