Мне нужно обновить таблицу, содержащую более 1 миллиона записей, чтобы замаскировать кредитные карты.
Я должен сохранить последние 4 цифры, а остальные должны стать X.
Я до сих пор придумываю это
BEGIN TRAN
-- SQL update in batches of 10,000
WHILE (2 > 1)
BEGIN
BEGIN TRANSACTION
UPDATE TOP ( 10000 ) tblMyTable
SET creditCardNumber = 'XXXXXX' + RIGHT(creditCardNumber, 4)
WHERE myDate < '2010-Feb-02'
IF @@ROWCOUNT = 0
BEGIN
COMMIT TRANSACTION
BREAK
END
COMMIT TRANSACTION
-- 1 second delay
WAITFOR DELAY '00:00:01'
END -- WHILE
GO
ROLLBACK
Проблема в том, что в базе данных есть записи, которые явно являются поддельными кредитными картами и могут даже не иметь 4 цифр. По сути, мне нужно обновить это, добавив такое же количество X и сохранив последние 4 цифры. Если число меньше 4, добавьте еще несколько X.
Пример
1242 would turn into XXXXXX1242
12 would turn into XXXXXXXX12
1234567890 would turn into XXXXXX7890