需要创建程序以在 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 的工作代码,你想知道实现它的最佳方法吗?如果是这样的话:
- 如果您希望在多个不同场景中使用逻辑 return 单个值 (valid/invalid),例如SELECT 语句、存储过程等,然后将其创建为函数,因为这样最灵活。
- 如果您只需要在一个地方使用逻辑,并且它是定期 运行 更广泛的功能的一部分(例如识别所有无效 SSN 然后更正它们的过程),那么我会将其合并到存储过程中
所以我有一个需要验证的 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 的工作代码,你想知道实现它的最佳方法吗?如果是这样的话:
- 如果您希望在多个不同场景中使用逻辑 return 单个值 (valid/invalid),例如SELECT 语句、存储过程等,然后将其创建为函数,因为这样最灵活。
- 如果您只需要在一个地方使用逻辑,并且它是定期 运行 更广泛的功能的一部分(例如识别所有无效 SSN 然后更正它们的过程),那么我会将其合并到存储过程中