如果我理解正确的话,你要能够适应输入组合的几种可能性功能,贝科使用你准备好的列作为输入可能会在每个函数调用中有所不同。如果是这样的:
- 显然,你的函数必须有尽可能多的参数,你有可能列,即对任何列可能会成为一个“列1”或“2列”,添加一个参数。
- 由于您有许多参数,您需要决定使用哪些参数,或者如果输入不合理以开始。例如:
- 如果您提供4个参数中的4个,该怎么办?拒绝工作?或者该功能可以适应这种情况吗?
- 如果提供了参数1和4,但是您的功能不适用于该功能,该怎么办?例如,它可以用于1 + 2或3 + 4。
最后,选择的一个或者:
- 设置任何不必要的输入
NULL
,然后用WHERE
子句查询一旦自动传递任何NULL
输入(例如:WHERE COL1 = ISNULL(@PAR1, COL1) AND COL2 = ISNULL(@PAR2, COL2)
,需要更多的逻辑为NULL
能够列),
- 或者,利用
IF
/ELSE
命令到几个不同的查询之间切换(不同的查询可能是维修头痛,所以尽可能避免)。
下面是一个例子基础上的东西我已经有了,但它采用了IF
/ELSE
方法。尝试做NULL
/ISNULL
代替:
CREATE FUNCTION [dbo].[SomeWackoName]
(@FirstArm tinyint, @SecondArm tinyint, @FirstLeg tinyint, @SecondLeg tinyint)
RETURNS @Results TABLE(
[Value] varchar(60)
) AS
BEGIN
-- For input, we need both arms, or both legs. It is acceptable to provide three inputs.
-- It is unacceptable to provide all four inputs (confusing), or failing to provide any full pair (like one input, or two unpaired inputs).
DECLARE @Validator tinyint = CASE WHEN @FirstArm + @SecondArm IS NULL THEN 0 ELSE 1 END + CASE WHEN @FirstLeg + @SecondLeg IS NULL THEN 0 ELSE 2 END
IF @Validator NOT BETWEEN 1 AND 2 RETURN --THROW 50000, 'INCORRECT INPUT WHYYYYYYYYYYYYYYY WHYYYYYYYYYYYYYYYYYY', 0;
-- Depending on input provided, decide how to behave.
IF @Validator = 1
INSERT INTO @Results SELECT 'I GOT THE ARMS. POPULATE WITH LEGS!!'
ELSE IF @Validator = 2
INSERT INTO @Results SELECT 'I GOT THE LEGS. POPULATE WITH ARMS!!'
-- Return results.
RETURN
END
你的内联函数有什么问题? – McNets
悬念真是不可思议!您何时会向您的帖子添加问题? – HABO
@McNets:不知道内联函数是什么。 –