我的SQL Server数据库中共有10个表。在该5个表中有21列,前5列和后3列具有相同的名称。
如何编写一个SQL查询,它将选择这5个表的名称。
[使用SQL Server数据库中的列数和列名选择表名]
例如: -
数据库名称 - SampleDB
SampleDB中可用的表是
在此表中[dbo.sample1,dbo.sample4,dbo.sample5,dbo.sample7,dbo.sample9]每个包含21列。此5个表的前5个列名称和最后3个列名称相同。我需要一个Query来选择这5个表的名称。
输出就像
1 dbo.sample1
2 dbo.sample4
3 dbo.sample5
4 dbo.sample7
5 dbo.sample9
有意义吗?
答案 0 :(得分:2)
我编写MS SQL 2012 Server语法(TSQL)
解决问题的第四步是找出,这些表有x(21)个字段。
SELECT
So.Name AS TableNames,
COUNT(Sc.Name) AS FieldCounter
FROM
Sysobjects AS So -- List of Tables
LEFT OUTER JOIN
SysColumns AS Sc -- List of Fields
ON So.id = sc.ID
WHERE
So.xtype = 'U' -- only show for **U**ser sables
GROUP BY
So.name
HAVING COUNT(Sc.Name) = 21 -- 21 fields in table
在此之后,您必须比较归档名称
答案 1 :(得分:0)
这样的东西? (在SQL Server的情况下)
select t.name, c.name, count(*) as duplicate_count from sys.tables t
inner join sys.columns c on c.object_id = t.object_id
group by t.name, c.name
having count(*) > 1