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日
  • 展开全部

悬赏问题

  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备