如何获取在SQL Server内部数据库的不同表中重复的列

时间:2019-05-27 09:39:23

标签: sql-server tsql

我有一个包含大量表的数据库。我想从这些表中列出出现在一个以上表中的所有列名及其表名。

我尝试在Google搜索中找到任何合适的文章,这些文章可以解释如何实现问题部分中描述的结果。

没有代码段

没有错误消息。

3 个答案:

答案 0 :(得分:1)

这将返回列名和表名:

    private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var listBoxItem = ((sender as ListBox).SelectedItem as ListBoxItem);
        button.Background = (SolidColorBrush)new BrushConverter().ConvertFromString(listBoxItem.Content.ToString());
    }

答案 1 :(得分:1)

有很多结果和代码片段显示了如何获取数据库中的所有列名称。这是对sys.columns的单个查询,例如:

select Name
from sys.columns

同样可以在任何表中返回多个事件的SQL查询,例如:

select Name,count(*)
from sys.columns
group by Name
having count(*)>1

将返回出现多次的列名。

通过将COUNT()OVER结合使用,无需连接即可获得列名和表名:

with t as (
    select name,
           object_name(object_id) as TableName,
           count(*) over (partition by name) cnt
    from sys.columns
)
select * 
from t
where cnt >1

答案 2 :(得分:0)

下面的查询将返回列名称及其在当前数据库表中的出现次数:

SELECT c.NAME AS 'ColumnName', COUNT(*) AS Occurences
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
GROUP BY c.NAME
HAVING COUNT(*) > 1

下面的查询将有助于识别将特定列名放置在哪些表中:

-- Find column name in all the tables
SELECT c.NAME AS 'ColumnName', t.NAME AS 'TableName'
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.NAME LIKE '%columnname%' -- to be searchable column name
ORDER BY TableName, ColumnName;