lqbr123 2023-03-01 10:24 采纳率: 50%
浏览 97
已结题

请问有没有不改变系统程序,只对数据库操作来实现字段重复提示,如何解决?

已有一套系统,数据库采用SQL SERVER,目前有个问题,订单数据表中有个字段需要唯一不能有重复值(前端程序无法修改了),目前为了满足当用户保存订单时对此字段进行重复值校验的功能,采用了在数据表中对此字段增加唯一键标识,到此当用户保存订单时可以提示

img


点击提示重复值对话框后,表单的保存按钮变灰,无法在修改正确的数据后再进行保存,因此此次输入的其它数据信息也就无法保存,用户体验就很差。
请问有没有不改变系统程序,只对数据库操作来实现以下目标:
1、当用户点击保存订单时,如果此字段重复了但可以存储数据
2、提示用户此字段重复,让用户进行修改
其实这个问题简单说就是,如果数据重复也可以先写入数据表,然后提示是哪个数据重复了,用户可以根据提示值进行修改

  • 写回答

7条回答 默认 最新

  • 「已注销」 2023-03-01 10:54
    关注

    参考GPT和自己的思路,你可以在SQL Server中使用 INSTEAD OF INSERT 触发器来达到这个目标。这个触发器可以拦截用户的插入操作并进行一些自定义的处理,例如提示用户重复键值并让用户进行修改。

    以下是一个示例的 INSTEAD OF INSERT 触发器,假设订单表名为 COPTD,唯一字段名为 UNIQUE_FIELD:

    CREATE TRIGGER [dbo].[TRG_COPTD_INSERT]
    ON [dbo].[COPTD]
    INSTEAD OF INSERT
    AS
    BEGIN
        SET NOCOUNT ON;
    
        -- 检查是否有重复键值
        IF EXISTS (SELECT 1 FROM inserted i
                   JOIN COPTD c ON c.UNIQUE_FIELD = i.UNIQUE_FIELD)
        BEGIN
            RAISERROR('违反了 UNIQUE KEY 约束“UQ_COPTD_2C2DDD79ECO91CC6”。不能在对象“dbo.COPTD”中插入重复键。', 16, 1);
            RETURN;
        END
    
        -- 如果没有重复键值,执行插入操作
        INSERT INTO COPTD (COL1, COL2, UNIQUE_FIELD, COL3)
        SELECT COL1, COL2, UNIQUE_FIELD, COL3
        FROM inserted;
    END
    

    在这个触发器中,首先检查插入的数据中是否存在重复键值。如果存在,触发器会抛出一个错误,提示用户键值重复。如果没有重复键值,触发器会执行插入操作,将数据插入到订单表中。

    需要注意的是,触发器可能会影响数据库性能,因此需要根据具体情况进行评估。如果触发器的性能问题比用户体验问题更严重,你可能需要考虑改变系统程序来解决这个问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 3月16日
  • 已采纳回答 3月8日
  • 修改了问题 3月1日
  • 修改了问题 3月1日
  • 展开全部

悬赏问题

  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂