我需要從資料庫中洗掉所有個人資料。許多表都有一個“ModifiedBy”列,其中包含用戶的電子郵件。
是否有一種方便的方法來迭代資料庫中具有 ModifiedBy 列的每個表并運行如下更新:
UPDATE [TableName]
SET [ModifiedBy] = CONVERT (
nvarchar(max),
HASHBYTES('SHA', CONCAT('MY_SALT_VALUE', [ModifiedBy])),
2
)
uj5u.com熱心網友回復:
基于sys.columns,sys.tables和sys.schemas系統視圖的動態陳述句是一種可能的選擇:
DECLARE @stm nvarchar(max)
DECLARE @err int
SELECT @stm = STRING_AGG(
CAST(CONCAT(
N'UPDATE ',
QUOTENAME(sch.[name]), N'.', QUOTENAME(tab.[name]),
N' SET ',
QUOTENAME(col.[name]), N' = CONVERT (nvarchar(max), HASHBYTES(''SHA'', CONCAT(''MY_SALT_VALUE'', ',
QUOTENAME(col.[name]), N')), 2)'
) AS nvarchar(max)),
'; '
)
FROM sys.columns col
JOIN sys.tables tab ON col.object_id = tab.object_id
JOIN sys.schemas sch ON tab.schema_id = sch.schema_id
WHERE col.[name] = 'ModifiedBy'
PRINT @stm
EXEC @err = sp_executesql @stm
IF @err <> 0 PRINT 'Error found'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/372101.html
標籤:sql sql-server
