kin*_*005 2 sql t-sql sql-server sql-server-2012
我正在尝试在SQL Server 2012中编写一个表值函数,它根据输入参数调用另一个表值函数,这是一个例子
CREATE FUNCTION [dbo].[fnMyLastFilterFunction]
(
@Param1 VARCHAR(64),
@Param2 VARCHAR(64),
@Param3 INT,
@StartDate DATETIME,
@EndDate DATETIME
)
RETURNS TABLE
AS
RETURN
(
IF (@Param3 = 0)
BEGIN
SELECT t1.Col1, t1.Col2, t1.Col3, t1.Col4
FROM fnMyFirstFilterFunction(@Param1,@Param2) t1
WHERE t1.DateTimeEnd BETWEEN @StartDate AND @EndDate
END
)
Run Code Online (Sandbox Code Playgroud)
当我执行此操作时,我收到两个错误:
是否有可能在表值函数中具有这样的条件?基本上我正在尝试从" fnMyFirstFilterFunction "中的所有数据开始实现过滤系统.因此,"fnMyLastFilterFunction"获取该数据并按@start和@end日期过滤它.我正在使用存储函数来分离过滤器阶段.我的SQL很生疏,所以如果有更好的方法,我会对想法持开放态度.
更新:
SpectralGhost的建议编译得很好,但如果在函数体中我希望逻辑基于@Param3的值调用不同的函数呢?如下:
IF (@Param3 = 0)
BEGIN
SELECT t1.Col1, t1.Col2, t1.Col3, t1.Col4
FROM fnMyFirstFilterFunction(@Param1,@Param2) t1
WHERE t1.DateTimeEnd BETWEEN @StartDate AND @EndDate
END
ELSE IF (@Param3 = 1)
BEGIN
SELECT t1.Col1, t1.Col2, t1.Col3, t1.Col4
FROM fnOtherFilterFunction(@Param1,@Param2) t1
WHERE t1.DateTimeEnd BETWEEN @StartDate AND @EndDate
END
Run Code Online (Sandbox Code Playgroud)
摆脱IF并替换此查询.
SELECT t1.Col1, t1.Col2, t1.Col3, t1.Col4
FROM fnMyFirstFilterFunction(@Param1,@Param2) t1
WHERE t1.DateTimeEnd BETWEEN @StartDate AND @EndDate
AND @Param3 = 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
432 次 |
| 最近记录: |