如何将列值一一传递给 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 函数?的主要内容,如果未能解决你的问题,请参考以下文章