J. *_*man 5 sql t-sql sql-server
假设我有一行数据,存储如下:
------------------------
| Col 1 | Col 2 | Col 3 |
|------------------------|
| Foo | Bar | Foobar |
Run Code Online (Sandbox Code Playgroud)
我如何将其连接成一个字符串,如下所示?
Foo-Bar-Foobar
Run Code Online (Sandbox Code Playgroud)
该表中的列标题(以及列标题的数量)是未知的,因此按列名称选择不是一个选项(?)。
请注意,我并不是试图将值列表连接到列中,而是尝试将值存储连接到一行中。我还希望避免使用数据透视表,因为我将处理大量数据并且不希望性能受到影响。
在这种情况下,我真的很喜欢 XML 在处理泛型集方面的强大能力:
SELECT STUFF(b.query('
for $element in ./*
return
<x>;{$element/text()}</x>
').value('.','nvarchar(max)'),1,1,'')
FROM
(
SELECT TOP 3 * FROM sys.objects o FOR XML PATH('row'),ELEMENTS XSINIL,TYPE
) A(a)
CROSS APPLY a.nodes('/row') B(b);
Run Code Online (Sandbox Code Playgroud)
结果
sysrscols;3;4;0;S ;SYSTEM_TABLE;2017-08-22T19:38:02.860;2017-08-22T19:38:02.867;1;0;0
sysrowsets;5;4;0;S ;SYSTEM_TABLE;2009-04-13T12:59:05.513;2017-08-22T19:38:03.197;1;0;0
sysclones;6;4;0;S ;SYSTEM_TABLE;2017-08-22T19:38:03.113;2017-08-22T19:38:03.120;1;0;0
Run Code Online (Sandbox Code Playgroud)
有些事情要提一下
;
as 分隔符,因为-
包含连字符的值可能会中断(例如 DATE)TOP 3
fromsys.objects
来创建一个简单、俗气的独立示例ELEMENTS XSINIL
强制引擎不忽略 NULL 值的功能。您可以尝试在 2016 年之前的版本中创建 JSON 字符串
SELECT '{'
+ STUFF(b.query('
for $element in ./*
return
<x>,"{local-name($element)}":"{$element/text()}"</x>
').value('.','nvarchar(max)'),1,1,'')
+ '}'
FROM
(
SELECT TOP 3 * FROM sys.objects o FOR XML PATH('row'),TYPE
) A(a)
CROSS APPLY a.nodes('/row') B(b);
Run Code Online (Sandbox Code Playgroud)
结果
{"name":"sysrscols","object_id":"3","schema_id":"4","parent_object_id":"0","type":"S ","type_desc":"SYSTEM_TABLE","create_date":"2017-08-22T19:38:02.860","modify_date":"2017-08-22T19:38:02.867","is_ms_shipped":"1","is_published":"0","is_schema_published":"0"}
{"name":"sysrowsets","object_id":"5","schema_id":"4","parent_object_id":"0","type":"S ","type_desc":"SYSTEM_TABLE","create_date":"2009-04-13T12:59:05.513","modify_date":"2017-08-22T19:38:03.197","is_ms_shipped":"1","is_published":"0","is_schema_published":"0"}
{"name":"sysclones","object_id":"6","schema_id":"4","parent_object_id":"0","type":"S ","type_desc":"SYSTEM_TABLE","create_date":"2017-08-22T19:38:03.113","modify_date":"2017-08-22T19:38:03.120","is_ms_shipped":"1","is_published":"0","is_schema_published":"0"}
Run Code Online (Sandbox Code Playgroud)
ELEMENTS XSINIL
您也可以添加到此查询中。这取决于您是否希望 NULL 被简单地忽略,或者您是否想将它们包含为"SomeColumn":""
归档时间: |
|
查看次数: |
402 次 |
最近记录: |