需要创建程序以在 table 中验证 SSN

Need to create procedure to validate SSN in table

所以我有一个需要验证的 tables SSN 和所有 SSN 缺失或无效的列表。我有下面的代码来验证这一点,创建 temp table 其中是用于生成下一组 SSN 的 High Group 数据列表,取自 SSA 的网站。所以我已经插入到 temp table 中,现在我需要使用下面的函数来验证 SSN 是否有效。最好的方法是什么?使用下面的代码创建函数并从存储过程调用函数或者有其他方法?

DECLARE @ssn VARCHAR(15)
SET @ssn = ' '

SELECT 
        @ssn SSN,
        CASE 
        WHEN ISNUMERIC(REPLACE(@SSN, '-', '')) <> 1 OR Sequence = 0 OR HighGroup = 0 THEN 'Invalid SSN' 
        ELSE
            CASE WHEN Groupcode % 2 = 1 THEN --odd groupcode 
                CASE WHEN GroupCode <10 THEN 
                    CASE WHEN HighGroup % 2 = 1 AND HighGroup <= GroupCode THEN 'Valid SSN' 
                    ELSE 'Invalid SSN' 
                    END
                ELSE
                    CASE WHEN HighGroup % 2 = 0 THEN 'Valid SSN' 
                    WHEN HighGroup % 2 = 1 THEN 
                        CASE WHEN HighGroup <= GroupCode THEN 'Valid SSN' ELSE 'Invalid SSN' END
                    END
                END
            ELSE --even groupcode
                CASE WHEN GroupCode >= 10 THEN
                    CASE WHEN HighGroup %2 =1 THEN
                        CASE WHEN HighGroup <=9 THEN 'Valid SSN' ELSE 'Invalid SSN' END
                    WHEN HighGroup %2 = 0 THEN
                        CASE WHEN HighGroup <= GroupCode THEN 'Valid SSN' ELSE 'Invalid SSN' END
                    END
                ELSE
                    CASE WHEN HighGroup %2 =1 THEN
                        CASE WHEN HighGroup <=9 THEN 'Valid SSN' ELSE 'Invalid SSN' END
                    WHEN HighGroup %2 = 0 THEN 
                        CASE WHEN HighGroup >=10 THEN 'Valid SSN' 
                        WHEN HighGroup < 10 THEN 
                            CASE WHEN HighGroup <= GroupCode THEN 'Valid SSN' ELSE 'Invalid SSN' END
                        END
                    END
                END
            END
        END [ValidSSN]
FROM 
(
SELECT 
    LEFT(REPLICATE('0', 9 - LEN(LTRIM(REPLACE(@SSN, '-', '')))) + REPLACE(@SSN, '-', ''), 3) Area,
    SUBSTRING(REPLICATE('0', 9 - LEN(LTRIM(REPLACE(@SSN, '-', '')))) + REPLACE(@SSN, '-', ''), 4, 2) HighGroup,
    RIGHT(REPLICATE('0', 9 - LEN(REPLACE(@SSN, '-', ''))) + REPLACE(@SSN, '-', ''), 4) Sequence,
    REPLICATE('0', 9 - LEN(REPLACE(@SSN, '-', ''))) + REPLACE(@SSN, '-', '') SSN
) v
LEFT JOIN ##SSN_RangeList sr
    ON v.Area = CAST(sr.AreaCode AS VARCHAR(3))

如果我没有正确理解你的问题,你有一些验证 SSN 的工作代码,你想知道实现它的最佳方法吗?如果是这样的话:

  1. 如果您希望在多个不同场景中使用逻辑 return 单个值 (valid/invalid),例如SELECT 语句、存储过程等,然后将其创建为函数,因为这样最灵活。
  2. 如果您只需要在一个地方使用逻辑,并且它是定期 运行 更广泛的功能的一部分(例如识别所有无效 SSN 然后更正它们的过程),那么我会将其合并到存储过程中