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