использование, если существует или не существует в sql - PullRequest
1 голос
/ 28 февраля 2020

Привет всем, я пишу хранимую процедуру в 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. Также передаются другие параметры, поэтому я не объявляю их.

1 Ответ

2 голосов
/ 28 февраля 2020

Я думаю, что вы хотите:

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 ;
...