У меня есть хранимая процедура, которая отвечает за вставку или обновление сразу нескольких записей. Я хочу выполнить это в своей хранимой процедуре ради производительности.SQL - Вставка и обновление нескольких записей сразу
Эта хранимая процедура принимает список идентификаторов разрешений с разделителями-запятыми и статус. Идентификаторы разрешений сохраняются в переменной, называемой @PermitID. Статус сохраняется в переменной, называемой @Status. У меня есть пользовательская функция, которая преобразует этот список идентификаторов разрешений с разделителями-запятыми в таблицу. Мне нужно пройти каждый из этих идентификаторов и сделать либо вставку, либо обновление в таблицу PermitStatus.
Если запись с идентификатором разрешения не существует, я хочу добавить запись. Если он существует, я хочу обновить запись с заданным значением @Status. Я знаю, как это сделать для одного идентификатора, но я не знаю, как это сделать для нескольких идентификаторов. Для отдельных идентификаторов, я следующее:
-- Determine whether to add or edit the PermitStatus
DECLARE @count int
SET @count = (SELECT Count(ID) FROM PermitStatus WHERE [PermitID][email protected])
-- If no records were found, insert the record, otherwise add
IF @count = 0
BEGIN
INSERT INTO
PermitStatus
(
[PermitID],
[UpdatedOn],
[Status]
)
VALUES
(
@PermitID,
GETUTCDATE(),
1
)
END
ELSE
UPDATE
PermitStatus
SET
[UpdatedOn]=GETUTCDATE(),
[Status][email protected]
WHERE
[PermitID][email protected]
Как перебрать записи в таблице, возвращаемые моей функции, определенной пользователем, чтобы динамически вставить или обновить записи по мере необходимости?
Какую версию SQL Server вы используете? – AdaTheDev
Вы можете почти наверняка сделать это как действие, основанное на наборе (нет необходимости в цикле) - как Ада спрашивает, на какой версии SQL Server вы работаете? –
Кстати, user255048, какие это разрешения? Просто из любопытства. :) – ErikE