У меня есть 3 таблицы: аудиоформаты, видеоформаты и fileInfo.
У меня есть транзакция такая, что когда я вставляю в таблицу fileInfo, эта вставка включает в себя FK из audioFormats и videoFormats. Вставка в последние таблицы происходит, если аудиоформат или видеоформат еще не находятся в этих таблицах, а затем сгенерированное (или существующее) значение 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.