SQL:在具有特定列的表中查找行COUNT(*)

时间:2018-09-13 20:55:55

标签: sql count find sql-server-2016 rowcount

Microsoft SQL 2016 / 13.0:我试图做的是向此查询添加一个COUNT(*)。该查询的作用-查找具有通用命名约定的表(许多具有公共前缀的表),并从这些表中查找具有特定列名的表。到目前为止,一切都很好-它有效!我接下来需要的是,在这些表中,是否有(数据的)“行”,如果有,那么每个表中有多少行。在此先感谢您的帮助,不胜感激! 干杯!

IF OBJECT_ID('tempdb..#result') IS NOT NULL
DROP TABLE #result
GO

CREATE TABLE #result(
   DatabaseName           [nvarchar](128),
   TableName              [nvarchar](128),
   ColumnName             [nvarchar](128),
   --NumOfRows            int NOT NULL, -- COUNT COLUMN
 )
GO

EXEC RunOnAllDataBases'
SELECT 
  {DatabaseName},
  t.name AS TableName, 
  c.name AS ColumnName
  --COUNT(*) AS NumOfRows --COUNT THE ROWS

FROM sys.tables AS t 
INNER JOIN sys.columns c 
ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE ''SPECIFIC COLUMN NAME''
AND (t.name LIKE ''COMMON_TABLE_NAME_%')

{ - SOMEWHERE IN HERE I NEED THE COUNT QUERY - }

ORDER BY TableName;
',
'INSERT into #result';

SELECT * FROM #result
--WHERE NumOfRows > 0 
--ORDER BY NumOfRows DESC

IF OBJECT_ID('tempdb..#result') IS NOT NULL
DROP TABLE #result
GO

这就是解决方案的原因(有一个错误-必须声明标量变量-不确定如何解决,尽管如果有人看到哪里,请随时发表评论)-非常感谢。 干杯!

IF OBJECT_ID('tempdb..#result') IS NOT NULL
DROP TABLE #result
GO

CREATE TABLE #result (
   [EnterpriseID]             [uniqueidentifier], 
   [EnterpriseName]           nvarchar](100), 
   MY_COUNT_COLUMN            int,  
   MyApp_TableName            [nvarchar](500)
   )
GO

EXEC RunOnAllDataBases'
DECLARE @myresults table (
    [EnterpriseID]             [uniqueidentifier], 
    [EnterpriseName]           [nvarchar](100), 
    MY_COUNT_COLUMN            int,
    MyApp_TableName            [nvarchar](500)
  ) 

DECLARE @MyApp_TableName nvarchar(500)
DECLARE qrylist CURSOR FAST_FORWARD READ_ONLY
FOR
SELECT t.name AS MyApp_TableName 

FROM sys.tables AS t 
INNER JOIN sys.columns c 
ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE ''SPECIFIC COLUMN NAME''
AND (t.name LIKE ''COMMON_TABLE_NAME_%')
ORDER BY MyApp_TableName;

OPEN qrylist

FETCH NEXT FROM qrylist
INTO @MyApp_TableName

WHILE @@FETCH_STATUS = 0
BEGIN
print @MyApp_TableName
declare @cnt int = 0;

exec sp_executesql N''@MyApp_TableName'', 
                   N''@rowcount int output'', @cnt output;

INSERT into @myresults (
            [EnterpriseID], 
            [EnterpriseName],               
            MY_COUNT_COLUMN,
            MyApp_TableName
 )   

SELECT {entid},
       {dbname},
       @cnt,
       @MyApp_TableName

FETCH NEXT FROM qrylist INTO @MyApp_TableName
END

CLOSE qrylist
DEALLOCATE qrylist

SELECT * from @myresults',
'INSERT into #result';

SELECT * FROM #result

IF OBJECT_ID('tempdb..#result') IS NOT NULL
DROP TABLE #result
GO

0 个答案:

没有答案