基于具有RowID的2个表更新表是通用的

时间:2010-07-27 00:41:22

标签: sql sql-server sql-server-2005 tsql

我有一张这样的表:

RowID; ListDescription1; ListNormalisedDescription1;
1      XXXX       YYYY   NULL
2      ZZZZZ             NULL

我做了一个复杂的转换/规范化(删除空格,替换空格和拆分)并设法使相同的数据变成:

RowID; NormalisedItemDescrption1;
1      XXXX
1      YYYY
2      ZZZZZ

您可以看到这两个表之间的共性是RowID。

我想根据表更新ListNormalisedDescription1,所以变成:

RowID; ListDescription1; ListNormalisedDescription1;
1      XXXX       YYYY   XXXX;YYYY
2      ZZZZZ             ZZZZZ

请注意,分隔符位于';'

如果可能,我试图避免光标。

由于

1 个答案:

答案 0 :(得分:2)

假设SQL Server 2005+,请使用:

UPDATE table
   SET ListDescription1 = STUFF(ISNULL(SELECT ' ' + x.NormalisedItemDescrption1
                                         FROM NORMALIZED_TABLE x
                                        WHERE x.rowid = rowid
                                     GROUP BY x.NormalisedItemDescrption1
                                      FOR XML PATH ('')), ''), 1, 2, ''),
       ListNormalisedDescription1 = STUFF(ISNULL(SELECT ';' + x.NormalisedItemDescrption1
                                                   FROM NORMALIZED_TABLE x
                                                  WHERE x.rowid = rowid
                                               GROUP BY x.NormalisedItemDescrption1
                                                FOR XML PATH ('')), ''), 1, 2, '')