组合两个不同数据集的列



我有一个UDF,它需要始终返回相同的数据集结构,列a、b、c和d。它需要从多个数据源返回UNION ALL,包括其他UDF:s。

假设我有另一个返回列a和b的函数(myOtherUDF)。我还有一个表(myTable),其列名为a、b、c和d。我想做的是在myOtherUDF和myTable上以一种方式将列c和d添加到myOtherUDF上。

。我希望这个工作,虽然myOtherUDF缺乏列c和d:

CREATE FUNCTION myUDF (@param INT)  
RETURNS @tbl TABLE   
(  
a int NOT NULL,  
b int NOT NULL,
c int NOT NULL,
d int NOT NULL
)  
AS
BEGIN
INSERT INTO @tbl
SELECT * FROM myTable
UNION ALL // this will obviously not work
SELECT * FROM myOtherUDF(@param)
RETURN
END

我不能使用进程来预加载表,也不能使用视图,因为我需要参数@param。

如果您显式列出您的列—这是最佳实践—您立即解决了这个问题,在myOtherUDF中添加cd的默认值之后;

INSERT INTO @tbl (a, b, c, d)
SELECT a, b, c, d
FROM myTable
UNION ALL
SELECT a, b, 0, 0
FROM myOtherUDF(@param);
RETURN;

要清楚,如果不列出列,您几乎永远不应该使用select *insert into table。这样可以省去很多麻烦。

出于性能考虑,使用内联表值函数几乎总是更好,例如

CREATE FUNCTION myUDF
(
@param INT
)  
RETURNS TABLE   
RETURN
SELECT a, b, c, d
FROM myTable
UNION ALL
SELECT a, b, 0, 0
FROM myOtherUDF(@param);

相关内容

  • 没有找到相关文章

最新更新