Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 查询以在多个表中包含字符串的字段中返回不同的值_Sql Server - Fatal编程技术网

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

Sql server 查询以在多个表中包含字符串的字段中返回不同的值,sql-server,Sql Server,下面的查询在数据库中查找包含“%string%”的字段,并在包含5列的表中返回这些字段;架构、表、表中字段标题中包含所需字符串的字段数、表中的行数,最后是字段名 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

下面的查询在数据库中查找包含“%string%”的字段,并在包含5列的表中返回这些字段;架构、表、表中字段标题中包含所需字符串的字段数、表中的行数,最后是字段名

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;
我现在想要的是一个字段,它显示在上述查询中返回的所有列的标题中包含“string”的字段中不同值的数量

MS SQL Server是否在字段中存储有关不同值的任何信息?是否可以发送到?

更新的答案


<>你实际上应该考虑在这种情况下运行2个查询。或者使用子查询,这可能会导致大数据集的性能问题。子查询可能如下所示

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

我为您设置了一个fiddle

可能是为了简单地回答问题,但您能否不使用COUNTDISTINCT c.name,这将要求FROM子句包含相应的表,而上面的查询不包含这些表。我从系统表中获取上述所有信息。我明白了,您需要名称包含字符串的列中不同值的数目。如果不执行SQL字符串来检索信息,这可能会很困难。我不相信sys数据库中存储了多少不同的值。afaik我无法从sys表中查询字段本身。我希望这个字段被添加到上述查询中,因为可能有数百个字段返回,其中的名称包含“string”。在这种情况下,您实际上应该考虑运行2个查询。或者使用子查询,这可能会导致大数据集的性能问题。子查询可以像这样选择[…],从sys.all_columns c中选择COUNT*,其中c.name='%string%'按c.name分组为totalcolswithstring这不是我要查找的。它将返回一个重复的值,该值表示名称中包含“%string%”的字段计数。我在寻找各自表中每个字段中的不同值的数量。不,这也不是我想要的。这将在字段列表中返回具有该列标题的所有_列中的不同字段名。我想要的是基础列中不同的值。基本上是一样的,只是从名称更改为值。