Hãy xem các bài viết này:
http://dataeducation.com/rowset-string-concatenation- phương-pháp-nào-là-tốt nhất /
http:// www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/ (Xem giải pháp kết hợp chéo của Phil Factor trong các câu trả lời - sẽ hoạt động trong SQL Server 2000)
Rõ ràng là trong SQL Server 2005, thủ thuật FOR XML là dễ nhất, linh hoạt nhất và nói chung là hiệu quả nhất.
Đối với việc trả về một tập hợp hàng cho mỗi hàng, nếu bạn vẫn muốn làm điều đó vì lý do nào đó, bạn có thể thực hiện điều đó trong một thủ tục được lưu trữ, nhưng khách hàng sẽ cần sử dụng tất cả các hàng trong tập hợp hàng đầu tiên và sau đó chuyển sang phần tiếp theo tập hợp hàng và liên kết nó với hàng đầu tiên trong tập hợp hàng đầu tiên, v.v. SP của bạn sẽ cần mở một con trỏ trên cùng một tập hợp mà nó được trả về như tập hợp hàng đầu tiên và chạy nhiều lựa chọn theo trình tự để tạo ra tất cả các tập hợp hàng con. Đó là kỹ thuật tôi đã thực hiện, nhưng chỉ ở đâu TẤT CẢ dữ liệu thực sự cần thiết (ví dụ:trong chế độ xem dạng cây được điền đầy đủ thông tin).
Và bất kể người ta nói gì, làm điều đó ở phía máy khách thường gây lãng phí băng thông rất lớn, bởi vì trả về tất cả các hàng và thực hiện lặp và ngắt ở phía máy khách có nghĩa là một số lượng lớn các cột giống hệt nhau đang được chuyển khi bắt đầu mỗi hàng chỉ để lấy cột thay đổi ở cuối hàng.
Dù bạn làm điều đó ở đâu, đó phải là một quyết định sáng suốt dựa trên của bạn trường hợp sử dụng.