我已经创建了这段代码,想要停止将任何重复的值插入数据库,但是这些值仍然可以继续进入IF_Translations表中。我试图在此行上将0更改为-1:
IF (SELECT COUNT(*) FROM IF_TRANSLATIONS WHERE INVALUE = @INVALUE) = 0 有什么帮助吗?
码:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[translationduplicate]
AS
SET NOCOUNT ON;
DECLARE @ID INT, @TRANSLATE_ID VARCHAR(15), @INVALUE VARCHAR(15),
@OUTVALUE VARCHAR(15), @CONV_DIRECTION VARCHAR(5),
@PLANT_ID VARCHAR(5), @LMOD DATETIME
IF (SELECT COUNT(*) FROM IF_TRANSLATIONS WHERE INVALUE = @INVALUE) = 0
BEGIN
INSERT INTO IF_TRANSLATIONS(ID, TRANSLATE_ID, INVALUE, OUTVALUE, CONV_DIRECTION, PLANT_ID)
VALUES((SELECT MAX(ID)FROM [OPERATOR_LIVE_43].[dbo].[IF_TRANSLATIONS]) + 1, @TRANSLATE_ID, @INVALUE, @OUTVALUE, 3, @PLANT_ID)
END
正确的解决方案是让数据库检查完整性。您可以使用唯一的约束或索引来完成此操作(为此目的,两者是等效的):
alter table if_translations add constraint unq_if_translations_invalue
unique (invalue);
您还应该修复ID它,使其成为一IDENTITY列-在代码中递增值并不安全,除非您锁定整个表,这非常昂贵。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。