2009-05-04 64 views

Trả lời

5

Bạn có thể ghép sử dụng một 'đặt' tuyên bố nhúng trong một truy vấn:

declare @combined varchar(2000) 
select @combined = isnull(@combined + ', ','') + isnull(value,'') 
from simpleTable 

print @combined

(Lưu ý rằng ISNULL đầu tiên() initialises chuỗi, và thứ hai isnull() là đặc biệt quan trọng nếu có bất kỳ cơ hội của nulls trong cột 'giá trị', bởi vì nếu không một null duy nhất có thể quét sạch toàn bộ nối)

(sửa mã và giải thích sau khi bình luận)

+0

ngọt ngào! Tôi đã không nhận ra bạn có thể làm điều đó. Tôi luôn nghĩ rằng thiết lập và chọn làm việc tương tự cho nhiệm vụ. –

+1

bạn có thể muốn làm cho nó "+ ISNULL (giá trị, '')" bởi vì "+ giá trị" sẽ null ra bất kỳ phần nào của chuỗi xây dựng trước khi hàng với giá trị null –

+0

bạn nói đúng! không biết làm thế nào tôi bị mất ... đã chỉnh sửa. – codeulike

2
DECLARE @EmployeeList varchar(100) 

SELECT @EmployeeList = COALESCE(@EmployeeList + ', ', '') + 
    CAST(Emp_UniqueID AS varchar(5)) 
FROM SalesCallsEmployees 
WHERE SalCal_UniqueID = 1 

SELECT @EmployeeList 

Kết quả:

1, 2, 4 
3

này sẽ chỉ làm việc trong MSSQL 2005+

select value + ',' from simpletable for xml path ('') 

..one cách để ngăn chặn việc thêm dấu phẩy:

select case(row_number() over (order by id)) 
when 1 then value else ',' + value end 
from simpletable 
for xml path ('') 
+0

Chỉ hoạt động trong SQLServer 2005+, nhưng đó là một hack thú vị. – FlySwat

+0

nếu chỉ có một cách khéo léo để xóa dấu phẩy cuối cùng đó :) – dotjoe

+0

thêm một cách khéo léo để xóa dấu phẩy cuối cùng đó :) – gordy

0

Điều này dựa trên câu trả lời @codeulike, nhưng sẽ ngăn chặn mất phần của chuỗi được ghép nối trước khi một giá trị "null" được nối vào.

declare @combined varchar(2000) 
select @combined = isnull(@combined + ', ','') + ISNULL(value,'') 
from simpleTable 

print @combined 
Các vấn đề liên quan