【问题标题】:Find a specific column in an unknown table in a database?在数据库的未知表中查找特定列?
【发布时间】:2009-08-04 19:28:09
【问题描述】:

我正在尝试在具有 125 个表的数据库中查找未知的特定列。我正在寻找通配符,例如“%watcher%”。这可能吗?

【问题讨论】:

    标签: mysql


    【解决方案1】:
    SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
      FROM INFORMATION_SCHEMA.COLUMNS
     WHERE column_name LIKE '%watcher%'
    [AND table_schema = 'database']
    

    【讨论】:

    • 我在 shell 上运行它时遇到错误。也许我打错了? mysql> SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE column_name LIKE '%watcher%' [AND table_schema = 'database']; ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“[AND table_schema = 'database']' 附近使用正确的语法
    • 我用方括号表示其中的条件是可选的。要么完全删除它(例如 LIKE '%watcher%' 之后的所有内容),要么只删除方括号字符并将“database”替换为您的实际数据库名称(保留单引号)
    • 我删除了方括号并得到另一个错误:ERROR 1146 (42S02): Table 'INFORMATION_SCHEMA.COLUMNS' doesn't exist
    • 您使用的是哪个 MySQL 版本?它应该适用于 5.0 及更高版本。如果您使用的是 4.1 及以下版本,恐怕您不走运 - 显示列的唯一方法是“SHOW COLUMNS”语句,一次只能为一个表运行。
    • 我很抱歉不知道我以前做错了什么,但这实际上确实有效。感谢您对我的耐心等待!
    【解决方案2】:

    这会显示更多信息...

    DECLARE @columnName as varchar(100)
    SET @columnName = 'ColumnName'
    
    SELECT t.name AS Table, c.name AS Column,
    ty.name AS Type, c.max_length AS Length, c.precision AS Precision
    FROM sys.tables AS t
    INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
    INNER JOIN sys.types ty ON c.system_type_id = ty.system_type_id
    WHERE c.name LIKE @columnName
    ORDER BY t.name, c.name
    

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      相关资源
      最近更新 更多