大家好,我正在用SQL语言为一个列表编写一个存储过程,例如,我有一个项目列表,我想添加另一个项目,所以我得到了MAX(columName)并添加了+1,这将导致最后一个选项。唯一的问题是我是按人过滤的。这意味着我也可以看到其他人的列表,并向其中添加内容。当有人还没有一个项目时,我的存储过程就不工作了。如何先检查它是否存在?
DECLARE @MAXID INT
SET @MAXID = (SELECT MAX(priority)+1
FROM Chores
WHERE userID = @user)
UPDATE Chores
SET userID= @user,
priority = @MAXID
FROM
Chores WITH (NOLOCK)
WHERE choreID= @iD 当我运行这个程序时,我得到的结果是项目的优先级号为Null。我猜是因为它没有找到任何东西的MAX()
正如您所看到的,我正在按给定的个人将+1添加到条目列表中,但是如果用户的列表中没有已经存在的内容,则我的值为空值。我相信我可以做一个If Exists(),但是如果我从get go开始声明和设置值,它将如何工作呢?另外,其他参数也是传入的,这就是为什么我不声明它们的原因。
发布于 2020-02-29 01:39:40
我认为你想要:
UPDATE Chores
SET userID= @user,
priority = COALESCE(max_priority, 1)
FROM (SELECT c.*, MAX(CASE WHEN userId = @user THEN priority END) OVER () as max_priority
FROM Chores c
) c
WHERE choreID = @iD ;https://stackoverflow.com/questions/60456760
复制相似问题