如何将列值一一传递给 SQL 函数?

Posted

技术标签:

【中文标题】如何将列值一一传递给 SQL 函数?【英文标题】:How to pass column values one by one to a SQL function? 【发布时间】:2021-01-06 15:23:49 【问题描述】:

这是我的表“LoadData”

Sequence_Code ID Current_Year Record_Date Status
17AA 310001 2017 2017-01-01 S
18AB 310002 2018 2018-02-22 A
19AC 310003 2019 2019-02-10 S
NULL 310004 2019 2019-02-20 A
NULL 310005 2020 2019-03-20 A
NULL 310006 2020 2019-04-20 A

我们如何才能将那些记录 where Sequence_Code is NULL 和状态为 A 的“ID”一一传递给函数?

我的功能:

CREATE FUNCTION [dbo].[GetNextSequenceCode_TEST] 
    (@LastSeqAlphabet varchar(50))
RETURNS varchar(100)
AS
BEGIN 
    -- will generate and update a sequence code in the same table
END 

如果需要,请更新 fFunction 的输入参数。

【问题讨论】:

你不能真正做到这一点。您需要逐行执行,例如,在 select 中。 你还需要一个函数吗?您在这里的预期结果是什么?此外,函数不能执行UPDATE 语句,因此它不能更新所述表。 也许您需要交叉应用或外部应用。有什么要求?和原来的查询/表? @Larnu 我同意函数不会更新,我的意思是我的函数正在生成值,我可以在表中更新它。我关心的是多个ID,我们如何将具有status='A'和Sequence_Code IS NULL的多个ID一一传递给函数,所以它会继续生成值,更新语句会更新它。 @GordonLinoff .. 是的.. 我们需要逐行进行.. 这就是为什么我写了如果需要请更改参数,因为我需要为 ID 的状态为“A”生成 Sequence_Cd . 【参考方案1】:

也许我过于简化了,因为我不完全理解您的要求,但这可以简单到:

UPDATE LoadData
SET
    Sequence_Code = dbo.GetNextSequenceCode_TEST ( ID )
FROM LoadData AS ld
WHERE
    ld.Sequence_Code IS NULL
    AND ld.[Status] = 'A';

【讨论】:

以上是关于如何将列值一一传递给 SQL 函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何仅将列值插入前一千行

将列值显式设置为空 SQL Developer

将列值显式设置为null SQL Developer

如何将列值分隔为列名?

如何将列值转换为vba宏中的行

spark将列值作为sql查询执行