我有3个表:audioFormats,videoFormats和fileInfo.
我有一个事务,当我插入到fileInfo表中,该插入包括来自audioFormats和videoFormats的FK.如果音频格式或视频格式不在这些表中,则将后面的表插入,然后将生成的(或现有的)ID值插入到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 举报,一经查实,本站将立刻删除。