caffrey_1 Ответов: 2

Проблема с обновлением SQL


У меня есть проблема с этой процедурой, обновление, естественно, обновляет все записи, где я хочу, чтобы он обновил только одну


--checks to see if the user is signed out, if so sign them in then return 2

ELSE IF EXISTS (select * from sitestaff where SIOType=@SIOType AND SIODate=convert(date,getdate()) and Name=@name and SignIn is NULL)

BEGIN

    update sitestaff
    set
    SignIn=getdate()
    where Name=@name and SIOdate = convert(date,getdate())
    set @result=2

END


Что я уже пробовал:

Мне нужно передать уникальный столбец, чтобы обновить только одну запись, но я не передаю UniqueID в запрос (база данных имеет уникальный идентификатор ID)

В идеале должно быть :-
update sitestaff
set
SignIn=getdate()
where Name=@name and ID=ID
set @result=2


Но не знаю, как это сделать, в основном ему просто нужно обновить последнюю запись

ZurdoDev

Что вы, которые нуждаются в помощи? Какой у вас вопрос?

2 Ответов

Рейтинг:
1

OriginalGriff

Если вы не скажете запросу, какое значение идентификатора вы хотите обновить, вы рискуете обновить несколько записей - это особенно проблема, когда вы выпускаете в производство и есть несколько применений, использующих БД одновременно.

Если идентификатор является полем идентификации и был создан ранее в том же соединении, вы можете получить это значение с помощью SCOPE_IDENTITY (Transact-SQL) | Microsoft Docs[^] функция.
Если это "реальное" значение UniqueID (то есть GUID), то вам нужно будет передать его оттуда, где он был создан, или вы получите больше проблем по мере продвижения.


Рейтинг:
1

caffrey_1

Думаю, я мог бы решить ее тоже простым способом

where Name=@name and SIOdate = convert(date,getdate())


должно быть :-

where Name=@name and SIOdate = convert(date,getdate()) and SignIn is NULL



Простое исправление: самая последняя запись всегда должна иметь нулевой знак