查找没有特定列名的所有表

时间:2011-08-30 15:10:43

标签: sql sql-server

所以,我已经看到很多关于查找具有特定列名的表的问题。但是,我正在尝试查找没有特定列的所有表。 (在这种情况下,EndDate)。是否有一个更优雅的解决方案,而不仅仅是找到该列的所有表,并将其与所有表的列表进行比较?

4 个答案:

答案 0 :(得分:13)

SELECT
    table_name
FROM
    INFORMATION_SCHEMA.TABLES T
WHERE
    T.TABLE_CATALOG = 'MyDB' AND
    T.TABLE_TYPE = 'BASE TABLE' AND
    NOT EXISTS (
        SELECT *
        FROM INFORMATION_SCHEMA.COLUMNS C
        WHERE
            C.TABLE_CATALOG = T.TABLE_CATALOG AND
            C.TABLE_SCHEMA = T.TABLE_SCHEMA AND
            C.TABLE_NAME = T.TABLE_NAME AND
            C.COLUMN_NAME = 'EndDate')

答案 1 :(得分:1)

尝试以下方法,它是标准的SQL(几乎适用于所有平台)

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
EXCEPT
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'EndDate'

正如你的建议,你不可能得到任何比这更简单的东西。

答案 2 :(得分:1)

这应该这样做。

SELECT * FROM INFORMATION_SCHEMA.TABLES t
WHERE NOT EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS c 
   WHERE c.TABLE_NAME = t.TABLE_NAME AND c.TABLE_SCHEMA=t.TABLE_SCHEMA 
  AND c.COLUMN_NAME='EndDate')

答案 3 :(得分:0)

我拥有的模式和表比我本应拥有的更多,因此我需要一个可以在一秒钟内运行的优化版本。

为什么不获取所有表,然后获取具有该字段的所有表,proxy: { '/myService/*': 'https://myServiceEndPoint/', }, 这些结果,并仅在UNION ALL处显示表名?这就是我所做的

请注意下面两个变量的更改:HAVING COUNT(table_name) = 1YourSchemaHere

YourFieldHere

SQL Fiddle上的在线演示:http://sqlfiddle.com/#!9/791dde/1/0

我的方法的说明:

  • 使用:SELECT TABLE_NAME, COUNT(TABLE_NAME) FROM ( (SELECT DISTINCT c1.TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS c1 WHERE c1.Table_Schema = "YourSchemaHere") UNION ALL (SELECT DISTINCT c2.TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS c2 WHERE c2.Table_Schema = "YourSchemaHere" AND c2.Column_Name = "YourFieldHere") ) x GROUP BY TABLE_NAME HAVING COUNT(TABLE_NAME) = 1;
  • 获取所有表
  • 获取所有具有列:SELECT DISTINCT c1.TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS c1 WHERE c1.Table_Schema = "YourSchemaHere"的表
  • SELECT DISTINCT c2.TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS c2 WHERE c2.Table_Schema = "YourSchemaHere" AND c2.Column_Name = "YourFieldHere"这两个结果。
  • 如果结果列表中的项目具有列,则将重复这些项目,但如果没有则仅显示一次。
  • 仅选择那些没有该字段的内容:UNION ALL