创建一个用户定义的表值函数,该函数应返回select
union all
动态查询。
我有一个表tbl_tablesinfo
,其中包含约3000个表名中的表名tbl1
,tbl2
,tbl3
等。
我不想创建视图,但是我希望通过执行select * from
返回所有表的union all
函数。
我的尝试
CREATE FUNCTION udf_alldata()
RETURNS TABLE
AS
BEGIN
DeclARE @Var VARCHAR(MAX) = ''
SELECT
@Var = STUFF((SELECT ' SELECT * FROM [' + tbl.TableNames + '] UNION ALL'
FROM [TestDB].SYS.TABLES tb
INNER JOIN [TestDB].dbo.[tbl_tablesinfo] tbl ON tb.name = tbl.TableNames
FOR XML PATH('')),1,'');
SET @var = LEFT(@var,LEN(@var) - 10);
EXEC @var
RETURN
END
我遇到错误:
“ BEGIN”附近的语法不正确。
这样做的原因是使用3k表创建视图的速度越来越慢,并且大约需要30分钟的时间,因此我正在通过创建函数来寻找替代方法。