Hier ist eine Lösung. Es handhabt nur bname
, aber Sie können es erweitern, um btitle
zu handhaben. Die Verkettung von Spaltenwerten für einen bestimmten Schlüssel ist in SQL keine Selbstverständlichkeit. Sie brauchen also einen Trick, um die Tabelle zu durchlaufen und jede Zeile mit demselben Schlüssel zu extrahieren. Der Trick besteht darin, eine Speichertabelle mit einer Identitätsspalte (z. B. n
) zu erstellen, die auf jeder Einfügung automatisch inkrementiert wird. Sie können dann durchschleifen und n = 1, dann n = 2 usw. auswählen, um die Zeichenfolge aufzubauen.
create function tbl_join_name(@id int)
returns varchar(max)
as
begin
declare @tbl table (n int identity(1,1), name varchar(max), title varchar(max))
insert @tbl(name, title)
select bname, btitle from TableB where bid = @id
declare @n int = 1, @name varchar(max) = '', @count int = (select count(*) from @tbl)
while @n <= @count begin
set @name = @name + (case @name when '' then '' else ',' end) + (select name from @tbl where n = @n)
set @n = @n + 1
end
return @name
end
go
select id, tbl_join_name(id) as bname --, tbl_join_title(id) as btitle
from TableA
Es ist nicht sehr effizient, obwohl. Getestet mit Sql Server 2008 R2.