【发布时间】:2017-01-02 08:24:01
【问题描述】:
我对一些“生成的代码过多”或不是最优雅的编码方式问题有一个挑战:
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 或 IS NOT NULL 语句。
【问题讨论】:
标签: sql-server function convention