У меня есть 3 таблицы: audioFormats, videoFormats и fileInfo. У меня транзакция такая, что когда я вставляю в таблицу fileInfo, эта вставка включает FK из аудиоформатов и видеоформатов. Вставка в последние таблицы происходит, если аудиоформат или видеоформат уже не находятся в этих таблицах, тогда сгенерированное (или существующее) значение ID вставляется в fileInfo.
Как эффективно вставлять значение только в том случае, если это значение не существует, но получить идентификатор значения, существует ли оно уже или было недавно вставлено, используя только SQL (и, возможно, транзакцию).
Я могу вставить значение, если оно еще не существует:
INSERT INTO audioformats (audioformat)
VALUES(@format)
WHERE NOT EXISTS (SELECT 1 FROM audioformats WHERE audioformat = @format)
Я могу получить вставленный идентификатор из вставки:
INSERT INTO audioFormats (audioFormat)
VALUES ('Test')
SET @audioFormatId = SCOPE_IDENTITY()
SCOPE_IDENTITY не даст мне идентификатор, если вставка не состоялась. Я могу выполнить скалярный запрос, чтобы получить идентификатор после возможной вставки, но похоже, что я мог бы сделать все это с максимально одним SELECT и INSERT.