查找具有列名称的所有表名称?

119 sql-server

如何获取给定列名称所在的所有表名?我希望在sql server中使用"Like"这些名称.例如 :-

  select TableNames where columnname like '%MyColumn%'
Run Code Online (Sandbox Code Playgroud)

请帮我

Nav*_*ari 272

请尝试以下查询.使用sys.columns获取详细信息: -

SELECT c.name AS ColName, t.name AS TableName
FROM sys.columns c
    JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE '%MyCol%';
Run Code Online (Sandbox Code Playgroud)

  • 并查看架构名称添加SCHEMA_NAME(t.schema_id) (8认同)
  • @KolobCanyon此搜索仅对您所在的数据库有效,因为sys.column表是在每个DB上创建的系统表(或不确定的视图)。如果要搜索不同的数据库,那将是一个更复杂的过程,可能意味着使用循环遍历不同的数据库的循环。 (2认同)

Ari*_*ion 29

你可以这样做:

SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%MyColumn%'
ORDER BY schema_name, table_name;
Run Code Online (Sandbox Code Playgroud)

参考:


Gan*_*kar 17

尝试这样:对于SQL SERVER 2008+

SELECT c.name AS ColName, t.name AS TableName
FROM sys.columns c
    JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE '%MyColumnaName%'
Run Code Online (Sandbox Code Playgroud)

要么

SELECT COLUMN_NAME, TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME LIKE '%MyName%'
Run Code Online (Sandbox Code Playgroud)

或者像这样的东西:

SELECT name  
FROM sys.tables 
WHERE OBJECT_ID IN ( SELECT id 
              FROM syscolumns 
              WHERE name like '%COlName%' )
Run Code Online (Sandbox Code Playgroud)