我有以下用于parent/child关系的示例表结构。
parent
child
parent 表
id LongText -------------- 10 20
child 表
id char value -------------------- 10 COLOR RED 10 HEIGHT 1FT 20 COLOR BLUE 20 WIDTH 2FT
我有一个要求,指定子表行中的某些字段需要串联在一起并放置在父表中。 如果可能, 我想在一个SQL查询中完成此操作。我写的更新语句如下。
UPDATE parent SET LongText = COALESCE(LongText, N'') + child.char + N': ' + child.val + ',' FROM parent INNER JOIN child ON parent.id = child.id
但是我只得到以下结果。
id LongText ------------------ 10 COLOR: RED, 20 COLOR: BLUE,
我希望(或者我应该说我 想要 )得到这个。
id LongText ------------------ 10 COLOR: RED,HEIGHT: 1FT 20 COLOR: BLUE,WIDTH: 2FT
这可能吗?关于如何执行此操作的任何建议?任何帮助表示赞赏!
这是一个SQLfiddle供参考。
update parent set longtext = stuff(( select ‘,’ + c.char + ‘: ‘ + c.val from child c where c.uid = parent.uid for xml path(‘’), type).value(‘.’,’nvarchar(max)’),1,1,’‘);
我已经用解决方案更新了您的SQLFiddle。
STUFF()函数','从第一个特征中删除前导(逗号)。
','
FOR XML根据查询结果创建XML文档。这是SQL Server的一个众所周知的技巧-因为该列未命名,所以不生成任何元素,并且仅输出(每行的)原始文本,然后将其合并为单个行。
互联网上很少有文章试图对其进行详细解释,因为该代码本身仅是一个解释。