SQL: найдите строку COUNT(*) в таблицах с определенным столбцом
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