我有 3 个表:audioFormats、videoFormats 和 fileInfo。
我有一个事务,当我插入到 fileInfo 表中时,该插入包含来自 audioFormats 和 videoFormats 的 FK。如果音频格式或视频格式不在这些表中,则会插入到后面的表中,然后将生成的(或现有的)ID 值插入到 fileInfo 中。
仅当该值不存在时,我如何有效地插入一个值,但获取该值的 ID,无论它是否已经存在或仅使用 SQL(可能是一个事务)刚刚插入。
如果它不存在,我可以插入一个值:
INSERT INTO audioformats (audioformat)
VALUES(@format)
WHERE NOT EXISTS (SELECT 1 FROM audioformats WHERE audioformat = @format)
我可以从插入中获取插入的 ID:
INSERT INTO audioFormats (audioFormat)
VALUES ('Test')
SET @audioFormatId = SCOPE_IDENTITY()
如果没有插入,SCOPE_IDENTITY 不会给我一个 ID 值。
我可以执行标量查询以在可能的插入后获取身份,但似乎我最多应该能够使用一个 SELECT 和 INSERT 来完成所有这些。
最佳答案
您可以使用 IF 语句来执行此操作
IF NOT EXISTS(SELECT TOP 1 1 FROM audioformats WHERE audioformat = @format)
BEGIN
INSERT INTO audioFormats (audioFormat)
VALUES ('Test')
SET @audioFormatId = SCOPE_IDENTITY()
END
ELSE
BEGIN
SELECT @audioFormatID = ID FROM audioformats WHERE audioformat = @format
END
或者你可以这样做:
INSERT INTO audioformats (audioformat)
SELECT @format
FROM audioFormats
WHERE NOT EXISTS (SELECT TOP 1 1 FROM audioformats WHERE audioformat = @format)
SELECT @audioFormatID = ID FROM audioformats WHERE audioformat = @format
关于sql - INSERT IF NOT EXISTS 但以任何一种方式返回身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8030363/