즉석의 답변입니다.
다음은 @maskPattern의 모든 항목을 @text에서 찾아 'x'로 바꿉니다. 예 : @maskPattern = XXXX-XXXX-XXXX-XXXX 인 경우 @text에서이 패턴을 찾아 모든 발생을 XXXX-XXXX-XXXX-XXXX로 바꿉니다. 발견되지 않으면 그대로 텍스트를 남겨 둡니다.
이 저장 프로 시저를 조작하여 maskPattern의 시작 부분의 3/4 만 마스크 할 수도 있습니다. 건배!
ALTER PROCEDURE [dbo].[SP_MaskCharacters] @text nvarchar(max),
@maskPattern nvarchar(500)
AS
BEGIN
DECLARE @numPattern nvarchar(max) = REPLACE(@maskPattern, 'x', '[0-9]')
DECLARE @patternLength int = LEN(@maskPattern)
WHILE (@text IS NOT NULL)
BEGIN
IF PATINDEX('%' + @numPattern + '%', @text) = 0 BREAK;
SET @text =
LEFT(@text, PATINDEX('%' + @numPattern + '%', @text)-1) --Get beginning chars of the input text until first occurance of pattern is found
+ @maskPattern --Append aasking pattern
+ SUBSTRING(@text, PATINDEX('%' + @numPattern + '%', @text) + @patternLength, LEN(@text)) -- Get & append rest of the text found after masking attern
END
SELECT @text
END
이것은 응용 프로그램 코드가 처리하기 쉬운 경향이있는 종류입니다. 당신 말이 맞아, 레 전의 길을가는 것 같아. 당신은 C#에서 그것을 할 수 있고 그것을 CLR에 저장된 proc에 넣어서 SSMS에서 쉽게 실행할 수 있습니다. 안타깝게도 텍스트 필드에 있기 때문에 잠재적으로 나쁜 레코드를 확인한 다음 다른 레코드를 수동으로 검사해야 할 수 있습니다. 결국 부품 번호도 올바른 숫자로 끝날 수 있습니다. 데이터 입력을 한 사람이 수동 검사를하는 사람이 아닌 것이 좋습니다. – HLGEM
카드 번호가있는 레코드의 단서로 크레디트 카드, 카드 번호, CCN을 검색 할 수도 있습니다. – HLGEM
나는 HLGEM에 동의합니다. 또한 향후 이러한 문제를 방지하려면 프런트 엔드에 유효성 검사를 추가하는 것이 좋습니다. 사용자에게 카드 번호가 입력되지 않았 음을 감지하고 배지 스캔 또는 감독관이 요구하는 것을 요구할 수 있습니다. 그렇게하면 나중에 문제가 될 가능성이 줄어 듭니다. –