我根据某些标准测试数据库对象是否存在。我希望能够根据假定的一组唯一列名来验证数据库对象是否存在。这在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结果。我现在忽略了观点。有什么建议吗?
答案 0 :(得分:1)
在我的问题中,我可能不够清楚。我实际上需要确保所有结果都来自同一个对象。我基本上是在找这样的东西:
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
答案 1 :(得分:0)
需要更改查询,您需要使用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')