内联 table 值函数

Inline table valued function

我需要创建一个 table 函数,它在第 1 列中始终从 1 开始生成一个指定数量的参数。在第 2 列中,如果第 1 列可以被 5 整除,它将显示 'Div5' 否则 NULL.

举个例子。我指定第 1 列将在 5 处停止,最终结果如下所示;

1 个空值

2 空

3 空

4 空

5 格 5

我可以创建函数,但我不确定如何创建条件第一列,或者如果第 2 列除以 5 是整数则 'Div5' 如果它是小数则 NULL ;

create function MyFunction ()

Returns @Division Table 

(Ind int , 
Div5 varchar(30))

AS
begin
Insert Into @Division (Ind, Div5)

select ???,???

Return;
End;

我希望这提供了足够的细节?

谢谢:)

这应该可以解决问题:

DECLARE @divisor INT = 10, @limit INT = 100;

WITH
              L0   AS(SELECT 1 AS C UNION ALL SELECT 1 AS O),
              L1   AS(SELECT 1 AS C FROM L0 AS A CROSS JOIN L0 AS B),
              L2   AS(SELECT 1 AS C FROM L1 AS A CROSS JOIN L1 AS B),
              L3   AS(SELECT 1 AS C FROM L2 AS A CROSS JOIN L2 AS B),
              L4   AS(SELECT 1 AS C FROM L3 AS A CROSS JOIN L3 AS B),
              L5   AS(SELECT 1 AS C FROM L4 AS A CROSS JOIN L4 AS B),
              Nums AS(SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS N FROM L5)
    SELECT N, CASE WHEN N % @divisor = 0 THEN 'Div' + CAST(@divisor AS VARCHAR(100)) ELSE NULL END AS Col2  FROM Nums 
    WHERE N <= @limit

这 2 个变量决定了您要查找的第一列可以整除的数字,第二列是您想要整除的数字,下一位只是一个 CTE,用于为第一列生成数字( numbers tables 对加载这样的东西非常有用)。然后它只是从数字 table 中选择所有数字直到你的限制和一个 case 表达式来检查它是否可以被你指定的数字整除(余数 0)和 DivX 位的一些字符串连接。

您应该能够轻松地将此逻辑集成到您的函数中。

您正在寻找基本上 returns 除法问题余数的模运算符。

DECLARE @SOMETBL TABLE (ROWNUM INT, DIVSTATUS CHAR(4))

INSERT @SOMETBL
(ROWNUM)
SELECT 1
UNION
SELECT 5
UNION
SELECT 2
UNION
SELECT 10

UPDATE @SOMETBL
SET DIVSTATUS = CASE WHEN ROWNUM%5 > 0 THEN NULL ELSE 'DIV5' END 

SELECT * FROM @SOMETBL