gpt4 book ai didi

sql - 通过函数更新字段

转载 作者:行者123 更新时间:2023-12-02 07:51:33 24 4
gpt4 key购买 nike

我有一个函数,可以获取 ID 并从表中返回日期(如果存在)或返回当前日期(如果不存在):

CREATE FUNCTION [dbo].[CLOSEDATE] (@ID int)
RETURNS datetime
AS
BEGIN
DECLARE @closed int;
DECLARE @result datetime;

SELECT @result = created_on from dbo.statuses_history
WHERE journalized_id = @ID and new_status = 'Закрыто';

IF @result IS NULL
SELECT @result = GETDATE()

RETURN (DATEADD(dd, 0, DATEDIFF(dd, 0, @result)))
END;

接下来的查询从表中返回正确的日期:

select dbo.closedate(4170)
select dbo.closedate(id) from issues where id = 4170

接下来的代码正确更新记录(表中的值):

DECLARE @d AS datetime
select @d = dbo.closedate(4170)
UPDATE issues SET created_on = @d WHERE issues.id = 4170

但是如果我更新记录,我会得到该字段中的当前日期:

UPDATE issues
SET created_on = dbo.CloseDate(id)
WHERE issues.id = 4170

看起来 ID 参数没有传递给函数。

最佳答案

你的测试(我在第一次阅读时错过了,抱歉)足以让我非常困惑。看来你的测试结果应该是不可能的。

我唯一的建议是重新编码该函数并看看会发生什么......

CREATE FUNCTION [dbo].[CLOSEDATE] (@ID int)
RETURNS TABLE
AS
RETURN
SELECT
(DATEADD(dd, 0, DATEDIFF(dd, 0, ISNULL(MAX(created_on), GetDate())))) AS close_date
FROM
dbo.statuses_history
WHERE
journalized_id = @ID
AND new_status = 'Закрыто'

然后...

UPDATE
issues
SET
created_on = fn.close_date
FROM
issues
CROSS APPLY
dbo.CLOSEDATE(id) AS fn
WHERE
issues.id = 4170

关于sql - 通过函数更新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8517079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com