Обходной путь. UDF не будут работать. Может быть, CLR, но не собственный SQL UDF.
Сначала создайте этот процесс, который объединит таблицу в одну строку
create proc dbo.GetDelimitedList
@tablename sysname
AS
declare @sql nvarchar(max)
set @sql = '
declare @id nvarchar(max), @item nvarchar(max)
select
@id = isnull(@id+'','','''') + convert(varchar,id),
@item = isnull(@item+'','','''') + item
from ' + quotename(@tablename) + '
select @id + ''~'' + @item'
exec (@sql)
GO
Затем используйте этот пакет SQL, чтобы получить вывод, эквивалентный SELECT GetDelimitedList(tablename) FROM mytable;
declare @tmp table(id int, mashed nvarchar(max))
declare @id int, @tablename sysname
-- start at first table
select top 1 @id = id, @tablename = tablename
from mytable
order by id asc
while @@ROWCOUNT > 0
begin
-- fill our temp table
insert @tmp (mashed) exec GetDelimitedList 'mytablelist'
update @tmp set id = @id where id is null
-- next table
select top 1 @id=id, @tablename = tablename
from mytable
where id > @id
order by id asc
end
SELECT * FROM @tmp;
Примеры таблиц:
create table mytable(id int, tablename varchar(100))
insert mytable values (1, 'mytablelist')
insert mytable values (3, 'mytablelist2')
create table mytablelist(id int, item varchar(100))
insert mytablelist values
(1, 'item1'),
(2, 'item2')
GO
create table mytablelist2(id int, item varchar(100))
insert mytablelist2 values
(11, 't2item1'),
(22, 't2item2')
GO