以下查询查找数据库中包含'%string%'的字段。并将它们返回到包含5列的表中; Schema,Table,包含表中字段标题中所需字符串的字段数,表中的行数,最后是字段名称。
SELECT s.name schemaName
, t.name tabName
, COUNT(c.name) OVER (PARTITION BY t.name ORDER BY t.name) totalColsWithString
, rc.row_count
, c.name colName
FROM sys.all_columns c
JOIN sys.tables t ON (t.object_id = c.object_id)
JOIN sys.schemas s ON (s.schema_id = t.schema_id)
LEFT JOIN
(
SELECT o.name
, ddps.row_count
FROM sys.indexes i
JOIN sys.objects o ON (i.object_id = o.object_id)
JOIN sys.dm_db_partition_stats AS ddps ON (i.object_id = ddps.object_id AND i.index_id = ddps.index_id)
WHERE i.index_id < 2 AND o.is_ms_shipped = 0
) rc ON (rc.name = t.name)
WHERE c.name LIKE '%String%'
AND row_count <> 0;
我现在想要的是一个字段,显示包含&#39;字符串&#39;的那些字段中的不同值的数量。在标题中(在上述查询中返回的所有列中)。
MS SQL Server是否在字段中存储有关不同值的任何信息?可以吗?
答案 0 :(得分:0)
更新回答
在这种情况下,您实际应该考虑运行2个查询。或者使用子查询,这可能会导致大数据集出现性能问题。子查询可能看起来像这样
SELECT [...],
(SELECT COUNT(*) FROM all_columns c2 WHERE c2.name= c.name) AS totalcolswithstring
FROM [...]
我为你设置了一个小提琴SqlFiddle