【发布时间】:2016-01-14 11:02:57
【问题描述】:
我想创建一个视图,其中列出了所有人的所有生日。假设我想“扩展”一个表格。
我有一个带有属性 ID 和生日的表 Person。 我有一个函数 FuncBirthdays 需要一个 ID 和一个生日,然后它列出了当前日期之前的所有生日。例如:
SELECT * FROM FuncBirthdays(123, '01.01.2014');
Result:
123; '01.01.2014'
123; '01.01.2015'
123; '01.01.2016'
// Current date is 14.01.2016, so the list stops here.
现在我想创建一个视图,其中包含表 Person 中所有人的所有生日。
SELECT *
FROM
Person
INNER JOIN
(SELECT * FROM FuncBirthdays(Person.ID, Person.Birthday)) FB
ON Person.ID = FB.ID
MS SQL Server 2012 Studio 中的错误信息是 Person.ID 和 Person.Birthday 未绑定。
我猜这种方式与 JOINS 的完成方式相冲突。我可以使用哪些 SQL 概念来扩展表? Person 中的每个数据集都会在输出中生成可变数量的数据集。目前我已经使用手动收集数据的 C#.net 函数解决了这个问题。有没有纯SQL的方式?
谢谢
马丁
【问题讨论】:
-
您可以使用 [APPLY 运算符] 从 FROM 子句调用表值函数。 @DMayuri 在下面提供了一个很好的例子。
标签: sql sql-server join user-defined-functions