在 sql 函数中创建动态条件的最佳方式

Best way of creating dynamic conditions in sql functions

我对某些 "too much code produced" 或不是最优雅的编码方式问题有疑问:

ALTER FUNCTION [dbo].fn_Function
    (@Location NVARCHAR(30) ='ALL')
RETURNS @ReportTable TABLE(DateOfProviValidity date,
                           DateOfFixumValidity date,
                           UserID NVARCHAR(50)
                          )
AS
BEGIN
    DECLARE @CurrentMonth DATE

    SET @CurrentMonth = dbo.fn_getFirstOfMonth(getdate())

    IF @Location IS NOT NULL AND @Location <> 'ALL'
        INSERT INTO @ReportTable
            SELECT * 
            FROM dbo.fn_getFinalPData(@CurrentMonth) 
            WHERE 1 AND Location = @Location
    ELSE
        INSERT INTO @ReportTable
            SELECT * 
            FROM dbo.fn_getFinalPData(@CurrentMonth) 
            WHERE 1 AND Location IS NOT NULL

    RETURN
END

是否有可能去掉最初的 IF @Location 语句并将其添加到更接近 Where 子句的地方?

我的问题是 case 语句不起作用,因为我不能执行 Location equals or IS NOT NULL 语句。

这样的事情怎么样?

INSERT INTO @ReportTable
SELECT * 
FROM dbo.fn_getFinalPData(@CurrentMonth) 
WHERE ISNULL(@Location, 'ALL') <> 'ALL'
OR Location = @Location

试试这个,

SELECT * 
FROM dbo.fn_getFinalPData(@CurrentMonth) 
WHERE   1 
    AND Location    =   ISNULL(NULLIF(@Location,'ALL'),Location)