應用場景:最近需要部署一套測試系統,如果將數據庫清理掉,那麼數據缺失,保護用戶的的真實身份證號碼,防止泄露,同時保證數據完整性,就想到 直接將系統中所有的真實身份證進行一次修改,但是數據庫的表比較多,一張一張表去修改太耗費時間了,所以採用了獲取庫中所有表,並根據表名獲取對應字段的值(由於是一套系統所以在建表的時候身份證字段名稱都是一致)。
declare @tName nvarchar(20)
declare @colName nvarchar(20)
declare @str nvarchar(max)
declare mycursor cursor FOR (SELECT DISTINCT col.name AS cl_name,tb.name AS tab_name FROM sys.columns col
LEFT JOIN sys.objects AS tb ON tb.object_id = col.object_id
WHERE tb.type='U' AND col.name LIKE '%ID%' AND col.name IN('CardID'))
open mycursor
fetch next from mycursor into @colName,@tName
while @@FETCH_STATUS=0
begin
set @str='select '+@colName+' from '+@tName
--SET @str='UPDATE '+@tName+' SET '+@colName+'=REPLACE('+@colName+',SUBSTRING('+@colName+',2,2),SUBSTRING('+@colName+',2,2)+1)'
print @str
exec(@str)
fetch next from mycursor INTO @colName,@tName
end
close mycursor
deallocate mycursor
關鍵點:遊標、SUBSTRING,REPLACE,SYS.OBJECTS,SYS.COLUMS