sql – INSERT IF NOT EXISTS但是返回身份的方式
发布时间:2020-12-12 08:51:30 所属栏目:MsSql教程 来源:网络整理
导读:我有3个表:audioFormats,videoFormats和fileInfo. 我有一个事务,当我插入到fileInfo表中,该插入包括来自audioFormats和videoFormats的FK.如果音频格式或视频格式不在这些表中,则将后面的表插入,然后将生成的(或现有的)ID值插入到fileInfo中. 只有在该值不存
我有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值. 解决方法您可以使用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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |