【发布时间】:2011-10-13 03:09:50
【问题描述】:
我经常使用这样的查询:
SELECT *
FROM ThisTable
OUTER APPLY (SELECT (SELECT SomeField + ' ' AS [data()]
FROM SomeTable
WHERE SomeTable.ID = ThisTable.ID
FOR XML PATH ('')) AS ConcatenatedSomeField) A
我经常想从该表中获取多个连接的连接字段,而不仅仅是一个。我可以在逻辑上这样做:
SELECT *
FROM ThisTable
OUTER APPLY (SELECT (SELECT SomeField + ' ' AS [data()]
FROM SomeTable
WHERE SomeTable.ID = ThisTable.ID
FOR XML PATH ('')) AS ConcatenatedSomeField) A
OUTER APPLY (SELECT (SELECT SomeField2 + ' ' AS [data()]
FROM SomeTable
WHERE SomeTable.ID = ThisTable.ID
FOR XML PATH ('')) AS ConcatenatedSomeField2) B
OUTER APPLY (SELECT (SELECT SomeField3 + ' ' AS [data()]
FROM SomeTable
WHERE SomeTable.ID = ThisTable.ID
FOR XML PATH ('')) AS ConcatenatedSomeField3) C
但是当需要更新任何内容时,它看起来很糟糕且容易出错; SomeTable 通常是一个很长的连接表列表,因此它也可能对性能产生影响,一遍又一遍地获取相同的表。
有没有更好的方法来做到这一点?
谢谢。
【问题讨论】:
标签: tsql sql-server-2008