如何根据一组列名获取数据库对象列表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何根据一组列名获取数据库对象列表?相关的知识,希望对你有一定的参考价值。

我正在根据某些标准测试数据库对象是否存在。我希望能够根据假设的一组唯一列名来验证数据库对象是否存在。这在SQL Server 2012中是否可行?即使我的测试由于良好的商业原因而过时,我也对答案感兴趣。这是我的第一直觉:

SELECT c.name AS 'ColumnName', t.name as 'TableName'
FROM sys.columns c
    INNER JOIN sys.tables t 
        ON c.object_id = t.object_id
GROUP BY c.name, t.name
HAVING 
    c.name = 'column1'
    AND c.name = 'column2'
    AND c.name = 'column3'

根据我对当前数据库的了解,我希望这个查询能给我3条记录,每条记录显示所有3的表达列和相同的表名。但是,这个查询给出了0个结果。我现在忽略了观点。有什么建议?

  • 我需要抓住任何具有这3个精确列的表(如果这些列在其他地方使用而没有彼此,我不希望它们在我的结果中)。
答案

在我的问题中,我可能不太清楚。我实际上需要确保所有结果都来自同一个对象。我基本上是在寻找这样的东西:

SELECT c.object_id, t.name
FROM sys.columns c
    INNER JOIN sys.tables t 
        ON c.object_id = t.object_id
WHERE
    c.name IN ('column1', 'column2', 'column3')
GROUP BY
    c.object_id, t.name
HAVING
    COUNT(c.object_id) = 3
另一答案

查询需要更改,您需要使用IN运算符。话虽这么说,你也不需要GROUP BY条款,因为没有聚合(总和,最小,最大等)要求。 HAVING通常与GROUP BY条款一起使用,因此在这里使用WHERE将满足您的要求。尝试下面的代码,看看你可以得到你想要的结果:

SELECT c.name AS 'ColumnName', t.name as 'TableName'
FROM sys.columns c
    INNER JOIN sys.tables t 
        ON c.object_id = t.object_id
WHERE 
    c.name in ('column1', 'column2', 'column3') 

以上是关于如何根据一组列名获取数据库对象列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用SOLRJ java客户端从SOLR获取列名(字段)?

如何使用 Go 在大查询中获取表列名列表

如何获取 Sqlite3 数据库上的列名列表?

如何从Oracle数据库中的表中获取列名(字段名)列表?

如何从一组中继容器中组合片段?

从 Firebird 数据库表中获取列名列表