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

SQL Server如何创建符合ISO标准的国家名称CHECK约束

SQL Server环境下ISO标准国家名称CHECK约束落地实现

SQL Server没有内置的ISO国家名称/代码校验规则,可落地的实现方案核心是基于ISO 3166-1官方标准维护标准值映射,再通过约束强制校验,具体实现步骤如下:

  • 首先维护独立的ISO标准国家参考表,不建议把上百个国家名称硬编码到CHECK约束中,后续标准更新、名称调整时维护成本极高。
-- 创建ISO 3166-1标准参考表
CREATE TABLE ISO_Country_Standard (
    Country_Code_A2 CHAR(2) PRIMARY KEY, -- ISO两字母国家代码
    Country_Code_A3 CHAR(3) UNIQUE, -- ISO三字母国家代码
    Standard_Country_Name NVARCHAR(100) UNIQUE NOT NULL -- ISO官方标准国家名称
);

-- 导入全量ISO 3166公开的标准数据,以下为示例
INSERT INTO ISO_Country_Standard (Country_Code_A2, Country_Code_A3, Standard_Country_Name)
VALUES 
('CN', 'CHN', N'China'),
('US', 'USA', N'United States of America'),
('JP', 'JPN', N'Japan'),
('GB', 'GBR', N'United Kingdom of Great Britain and Northern Ireland');
  • 优先选择外键方案实现校验,性能最优、逻辑最简洁,不需要自定义函数,只要录入值不在标准表中就会被拦截:
-- 假设业务表为Business_Table,存储国家名称的列为Country_Name
ALTER TABLE Business_Table
ADD CONSTRAINT FK_BusinessTable_CountryName_ISO
FOREIGN KEY (Country_Name) REFERENCES ISO_Country_Standard(Standard_Country_Name);
  • 如果需要支持灵活校验规则(比如允许匹配国家别名、大小写/格式兼容),可以通过自定义函数+CHECK约束实现:
    注意SQL Server的CHECK约束不支持直接在定义中写SELECT查询,需要先封装校验函数:
-- 自定义国家名称合法性校验函数
CREATE FUNCTION dbo.ufn_ValidateISOCountryName(@InputName NVARCHAR(100))
RETURNS BIT
AS
BEGIN
    DECLARE @ValidFlag BIT = 0;
    IF EXISTS (
        SELECT 1 FROM ISO_Country_Standard
        WHERE Standard_Country_Name = @InputName
        -- 如需大小写不敏感匹配,可追加COLLATE排序规则适配业务场景
    )
    BEGIN
        SET @ValidFlag = 1
    END
    RETURN @ValidFlag;
END;

-- 绑定CHECK约束到业务表列
ALTER TABLE Business_Table
ADD CONSTRAINT CHK_BusinessTable_CountryName_ISO
CHECK (dbo.ufn_ValidateISOCountryName(Country_Name) = 1);

实现注意事项

  • 如果业务场景允许,优先存储ISO两字母/三字母国家代码代替全称,存储空间更小、匹配效率更高,校验逻辑和上述方案完全一致。
  • 如果需要支持常用别名录入(比如输入"UK"自动识别为英国、输入"America"识别为美国),可以在标准参考表中新增别名映射列,调整校验函数的匹配逻辑即可,不需要修改业务表结构。
  • 不要依赖CLR集成或者第三方扩展做这类基础校验,会提升部署和维护成本,上述纯T-SQL方案可以覆盖绝大多数业务场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:31:02