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

无SQL Search权限,如何查找数据库中疑似'system origin'的列?

嘿,这个场景我太熟悉了!没法用SQL Search工具的话,咱们直接利用数据库自带的元数据系统来排查就行,不同数据库的具体操作略有差异,我给你整理了几个主流数据库的方案,按步骤来就能找到目标列:

通用思路

先通过元数据找出所有疑似名称的列(比如包含"system"、"origin"或者带空格的"system origin"),再验证这些列是否存在W、X、Y、Z这些取值。

针对不同数据库的具体操作

MySQL/MariaDB

第一步:找出候选列

先查询所有可能匹配名称的列,连带着所属库和表一起输出:

SELECT table_schema, table_name, column_name
FROM information_schema.columns
WHERE column_name LIKE '%system%' 
   OR column_name LIKE '%origin%'
   OR column_name LIKE '%system origin%'; -- 考虑列名带空格的情况

第二步:验证列的取值

如果候选列不多,可以手动逐个查询:

-- 替换成实际的库、表、列名
SELECT DISTINCT `column_name` 
FROM `your_database`.`your_table`
WHERE `column_name` IN ('W', 'X', 'Y', 'Z')
LIMIT 1; -- 只要返回结果,就说明这个列符合要求

要是候选列太多,用动态SQL自动遍历更高效:

SET @sql = '';
SELECT GROUP_CONCAT(
  'SELECT ''', table_schema, '.', table_name, '.', column_name, ''' AS matched_column FROM ', table_schema, '.', table_name, ' WHERE ', column_name, ' IN (''W'', ''X'', ''Y'', ''Z'') LIMIT 1'
  SEPARATOR ' UNION ALL '
) INTO @sql
FROM information_schema.columns
WHERE column_name LIKE '%system%' 
   OR column_name LIKE '%origin%'
   OR column_name LIKE '%system origin%';

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SQL Server

第一步:找出候选列

利用系统视图sys.columns和sys.tables来定位:

SELECT 
  SCHEMA_NAME(t.schema_id) AS schema_name,
  t.name AS table_name,
  c.name AS column_name
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE '%system%'
   OR c.name LIKE '%origin%'
   OR c.name LIKE '%system%origin%'; -- 适配带空格或下划线的变体

第二步:验证列的取值

手动验证的写法:

-- 替换成实际的架构、表、列名
SELECT DISTINCT column_name
FROM your_schema.your_table
WHERE column_name IN ('W', 'X', 'Y', 'Z');

动态SQL自动遍历的版本(需要对应权限):

DECLARE @sql NVARCHAR(MAX) = '';

SELECT @sql += 
  'SELECT ''' + SCHEMA_NAME(t.schema_id) + '.' + t.name + '.' + c.name + ''' AS matched_column FROM ' + 
  QUOTENAME(SCHEMA_NAME(t.schema_id)) + '.' + QUOTENAME(t.name) + 
  ' WHERE ' + QUOTENAME(c.name) + ' IN (''W'', ''X'', ''Y'', ''Z'') LIMIT 1 UNION ALL '
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE '%system%'
   OR c.name LIKE '%origin%'
   OR c.name LIKE '%system%origin%';

-- 去掉最后多余的UNION ALL
SET @sql = LEFT(@sql, LEN(@sql) - 10);

EXEC sp_executesql @sql;

PostgreSQL

第一步:找出候选列

用information_schema.columns查询,PostgreSQL的ILIKE支持大小写不敏感匹配:

SELECT table_schema, table_name, column_name
FROM information_schema.columns
WHERE column_name ILIKE '%system%'
   OR column_name ILIKE '%origin%'
   OR column_name ILIKE '%system origin%';

第二步:验证列的取值

手动查询:

-- 替换成实际的架构、表、列名
SELECT DISTINCT column_name
FROM your_schema.your_table
WHERE column_name IN ('W', 'X', 'Y', 'Z');

动态SQL自动遍历:

DO $$
DECLARE
  rec RECORD;
  sql_stmt TEXT;
BEGIN
  FOR rec IN 
    SELECT table_schema, table_name, column_name
    FROM information_schema.columns
    WHERE column_name ILIKE '%system%'
       OR column_name ILIKE '%origin%'
       OR column_name ILIKE '%system origin%'
  LOOP
    sql_stmt := 'SELECT ''' || rec.table_schema || '.' || rec.table_name || '.' || rec.column_name || ''' AS matched_column FROM ' || 
                quote_ident(rec.table_schema) || '.' || quote_ident(rec.table_name) || 
                ' WHERE ' || quote_ident(rec.column_name) || ' IN (''W'', ''X'', ''Y'', ''Z'') LIMIT 1';
    EXECUTE sql_stmt;
  END LOOP;
END $$;
额外提示
  • 如果列名的变体很多(比如缩写、下划线替代空格),可以调整LIKE的匹配规则,比如%sys%origin%、%system_origin%都加上
  • 要是数据库权限有限,可能没法访问系统元数据视图,这时候就得找DBA帮忙啦

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:02:14