微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐