INSERT IF NOT EXISTS, но вернуть идентификатор в любом случае

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

20
задан Charles Burns 18 July 2012 в 14:18
поделиться