使用列计数和名称选择sql表名

时间:2016-03-24 11:01:21

标签: sql sql-server columnname column-count

我的SQL Server数据库中共有10个表。在该5个表中有21列,前5列和后3列具有相同的名称。

如何编写一个SQL查询,它将选择这5个表的名称。

[使用SQL Server数据库中的列数和列名选择表名]

例如: -

数据库名称 - SampleDB

SampleDB中可用的表是

  1. dbo.sample1
  2. dbo.sample2
  3. dbo.sample3
  4. dbo.sample4
  5. dbo.sample5
  6. dbo.sample6
  7. dbo.sample7
  8. dbo.sample8
  9. dbo.sample9
  10. dbo.sample10
  11. 在此表中[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

    有意义吗?

2 个答案:

答案 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