我有一个包含大量表的数据库。我想从这些表中列出出现在一个以上表中的所有列名及其表名。
我尝试在Google搜索中找到任何合适的文章,这些文章可以解释如何实现问题部分中描述的结果。
没有代码段
没有错误消息。
答案 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;