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