You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:将MySQL敏感数据过滤查询转换为SQL Server语句

将MySQL敏感数据过滤查询转换为SQL Server版本

基于information_schema.columns的转换方案(贴近原MySQL语句)

SQL Server同样支持information_schema.columns视图,只需调整几个关键字段和排除条件即可:

SELECT 
    table_catalog AS 'Database',
    table_name AS 'Table',
    column_name AS 'Column',
    -- 如需带长度的完整类型(如varchar(50)),替换上面的data_type为以下语句
    -- CONCAT(data_type, CASE WHEN character_maximum_length IS NOT NULL THEN '(' + CAST(character_maximum_length AS VARCHAR) + ')' ELSE '' END) AS 'Type'
    data_type AS 'Type'
FROM information_schema.columns
WHERE 
    (column_name LIKE '%cnpj%' 
     OR column_name LIKE '%cpf%' 
     OR column_name LIKE '%nom%' 
     OR column_name LIKE '%fon%' 
     OR column_name LIKE '%tel%' 
     OR column_name LIKE '%mail%' 
     OR column_name LIKE '%end%' 
     OR column_name LIKE '%cel%' 
     OR column_name LIKE '%gen%' 
     OR column_name LIKE '%sex%' 
     OR column_name LIKE '%elet%' 
     OR column_name LIKE '%doc%' 
     OR column_name LIKE '%mae%' 
     OR column_name LIKE '%nasc%')
    AND table_catalog NOT IN ('master', 'model', 'msdb', 'tempdb')
    -- 若要排除系统架构(如sys、information_schema)下的对象,添加此条件
    -- AND table_schema NOT IN ('sys', 'information_schema')

关键转换说明

  • 数据库名字段:MySQL的table_schema对应SQL Server的table_catalog(SQL Server的table_schema指数据库内的架构,比如默认的dbo)
  • 字段类型:MySQL的column_type对应SQL Server的data_type,如果需要包含长度/精度的完整类型定义,使用注释中的拼接语句
  • 系统对象排除:SQL Server的核心系统数据库为master、model、msdb、tempdb,若需进一步排除系统架构下的对象,添加table_schema的过滤条件

基于sys系列视图的高效方案

如果偏好使用SQL Server原生的系统视图(性能更优),可以通过关联多个sys视图实现:

SELECT 
    db.name AS 'Database',
    t.name AS 'Table',
    c.name AS 'Column',
    ty.name AS 'Type'
    -- 如需带长度的完整类型,替换上面的ty.name为以下语句
    -- CONCAT(ty.name, CASE WHEN c.max_length > 0 AND ty.name IN ('varchar', 'nvarchar', 'char', 'nchar') THEN '(' + CAST(CASE WHEN ty.name LIKE 'n%' THEN c.max_length/2 ELSE c.max_length END AS VARCHAR) + ')' ELSE '' END) AS 'Type'
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
JOIN sys.schemas s ON t.schema_id = s.schema_id
JOIN sys.databases db ON t.database_id = db.database_id
JOIN sys.types ty ON c.system_type_id = ty.system_type_id AND c.user_type_id = ty.user_type_id
WHERE 
    (c.name LIKE '%cnpj%' 
     OR c.name LIKE '%cpf%' 
     OR c.name LIKE '%nom%' 
     OR c.name LIKE '%fon%' 
     OR c.name LIKE '%tel%' 
     OR c.name LIKE '%mail%' 
     OR c.name LIKE '%end%' 
     OR c.name LIKE '%cel%' 
     OR c.name LIKE '%gen%' 
     OR c.name LIKE '%sex%' 
     OR c.name LIKE '%elet%' 
     OR c.name LIKE '%doc%' 
     OR c.name LIKE '%mae%' 
     OR c.name LIKE '%nasc%')
    AND db.name NOT IN ('master', 'model', 'msdb', 'tempdb')
    AND s.name NOT IN ('sys', 'information_schema')

此方案说明

  • 通过sys.columns关联sys.tables、sys.schemas、sys.databases获取完整的库、表、架构层级信息
  • sys.types用于准确映射字段类型,同时关联system_type_id和user_type_id兼容用户自定义类型

内容的提问来源于stack exchange,提问作者Thiago

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:34:54