Syf AK Ответов: 2

Как я могу обновить текущий идентификатор как предыдущий идентификатор, если данные уже существуют


У меня есть таблица, в которой столбец RFID является уникальным, если пользователь попытался ввести дубликаты данных в столбец RFID, то LogID должен обновиться до предыдущего LogId

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

Стол:

Logid имя RFID тип
1 Арья АС123 добавить
2 Арья АС123 добавить

Здесь LogId 2 должен обновиться как 1.

Благодарим вас.

2 Ответов

Рейтинг:
10

MadMyche

Другим методом было бы использовать EXISTS чтобы проверить, присутствует ли запись, а затем сделать вставку или обновление в зависимости от результатов.

IF EXISTS(SELECT 1 FROM MyTable WHERE RFID = @RFID) BEGIN
  UPDATE MyTable SET [Name] = @NAME, [Type] = @TYPE WHERE RFID = @RFID
END; ELSE BEGIN
  INSERT INTO MyTableTable ([Name], RFID, [Type]) VALUES (@NAME, @RFID, @TYPE)
END
Способ выбора того, какой из них использовать, будет зависеть от ваших бизнес-правил, использования и т. д.... И если это сводится к тому или иному, запустите оба запроса в SSMS и выберите Показать Фактический План Выполнения чтобы увидеть, какой из них более эффективен

Примечание: Вы заметите, что оба вы Имя и Тип колонки заключены в квадратные скобки. Как правило, я бы избегал использовать их в качестве имен столбцов, поскольку они являются зарезервированными/защищенными/специальными словами. Я также избегал бы использования "специальных" имен из любого языка программирования, с которым вы работаете


Рейтинг:
0

OriginalGriff

Для нескольких значений я бы предложил объединить их: Слияние (Transact-SQL) - SQL Server | Microsoft Docs[^] но для отдельных элементов это не совсем осуществимо, так как вам понадобится временная таблица для слияния.

Для одного элемента попробуйте обновить его, а если это не сработает, выполните вставку:

Цитата:
НАЧИНАЙ ТРАН
Обновление таблицы mytable набор [имя] = @наименование, тип = @тип где RFID = @РЧИ
ЕСЛИ @@ROWCOUNT = 0
НАЧАТЬ
Вставьте в MyTableTable ([Name], RFID, Type) значения (@NAME, @RFID, @TYPE)
КОНЕЦ
СОВЕРШИТЬ ТРАН