sql – INSERT IF NOT EXISTS但是返回身份的方式

前端之家收集整理的这篇文章主要介绍了sql – INSERT IF NOT EXISTS但是返回身份的方式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有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

猜你在找的MsSQL相关文章