查询以在包含多个表的字符串的字段中返回不同的值

时间:2015-06-09 09:45:35

标签: sql-server

以下查询查找数据库中包含'%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是否在字段中存储有关不同值的任何信息?可以吗?

1 个答案:

答案 0 :(得分:0)

更新回答

在这种情况下,您实际应该考虑运行2个查询。或者使用子查询,这可能会导致大数据集出现性能问题。子查询可能看起来像这样

SELECT [...], 
   (SELECT COUNT(*) FROM all_columns c2 WHERE c2.name= c.name) AS totalcolswithstring
FROM [...]

我为你设置了一个小提琴SqlFiddle