В вашем коде есть допустимое предложение where
, поэтому он должен обновлять только совпадающие строки. Я могу только предположить, что все строки имеют одинаковое значение для number
.
Однако, похоже, у вас есть ошибка в определении @server_name
- и это может быть проблемой, о которой вы говорите. Здесь нет предложения where
, поэтому для него установлено значение произвольное - возможно, из того, что вы бы назвали «последней строкой». Хотя эта номенклатура - неправильное толкование того, что происходит.
В любом случае ваш ИП слишком сложен. Я подозреваю, что вы имеете в виду:
alter procedure [dbo].[getservername8] (
@number varchar(255)
) as
begin
update ea
set server_name = substring(short_description, charindex('-', short_description) + 15, 50)
from event_alerts ea
where number = @number;
end; -- getservername8
Также обратите внимание на хорошие методы программирования:
- Операторы заканчиваются точкой с запятой.
- В теле SP используется
begin
/ end
. end
помечено именем SP.