You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从SQL异常信息中提取唯一约束字段?附示例

如何从SQL唯一键约束异常中提取重复键值

当然有办法啦!这类SQL Server抛出的唯一键异常消息格式非常固定,我们可以用正则表达式精准提取出你需要的重复键值内容。

先看看异常消息的规律

你的两个示例异常都遵循同一个模式:

违反唯一键约束'UQ__T_Client_NameSector'。无法在对象'dbo.T_Clients'中插入重复键。重复键值为(Geto)。语句已终止。
违反唯一键约束'UQ__T_Client_NameSector'。无法在对象'dbo.T_Clients'中插入重复键。重复键值为(Rest, 1)。语句已终止。

不难发现,我们要的内容总是被包裹在重复键值为(和)之间,刚好可以用正则的捕获组来抓取这部分内容。

具体实现方案

我给你两种常用语言的实现示例,你可以根据自己的开发场景选择:

C# 示例

using System;
using System.Text.RegularExpressions;

public class SqlDuplicateKeyExtractor
{
    public static string GetDuplicateKeyFromException(string exceptionMsg)
    {
        // 正则匹配"重复键值为(xxx)"中的xxx部分
        var regexPattern = @"重复键值为\((.*?)\)";
        var matchResult = Regex.Match(exceptionMsg, regexPattern);

        return matchResult.Success ? matchResult.Groups[1].Value : null;
    }

    public static void Main()
    {
        // 测试示例1
        var msg1 = "违反唯一键约束'UQ__T_Client_NameSector'。无法在对象'dbo.T_Clients'中插入重复键。重复键值为(Geto)。语句已终止。";
        Console.WriteLine(GetDuplicateKeyFromException(msg1)); // 输出: Geto
        
        // 测试示例2
        var msg2 = "违反唯一键约束'UQ__T_Client_NameSector'。无法在对象'dbo.T_Clients'中插入重复键。重复键值为(Rest, 1)。语句已终止。";
        Console.WriteLine(GetDuplicateKeyFromException(msg2)); // 输出: Rest, 1
    }
}

Python 示例

import re

def extract_duplicate_key(exception_msg):
    # 定义匹配模式
    pattern = r"重复键值为\((.*?)\)"
    match = re.search(pattern, exception_msg)
    # 返回捕获到的内容,没有匹配到就返回None
    return match.group(1) if match else None

# 测试示例1
msg1 = "违反唯一键约束'UQ__T_Client_NameSector'。无法在对象'dbo.T_Clients'中插入重复键。重复键值为(Geto)。语句已终止。"
print(extract_duplicate_key(msg1))  # 输出: Geto

# 测试示例2
msg2 = "违反唯一键约束'UQ__T_Client_NameSector'。无法在对象'dbo.T_Clients'中插入重复键。重复键值为(Rest, 1)。语句已终止。"
print(extract_duplicate_key(msg2))  # 输出: Rest, 1

注意事项

这个方案是针对SQL Server的默认异常格式设计的,如果你的数据库是MySQL、PostgreSQL等其他类型,异常消息的格式会不一样,到时候只需要调整正则表达式的匹配模式即可。

内容的提问来源于stack exchange,提问作者Arie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 18:12:38