Это делает пару предположений, но вы можете создать динамический запрос UNION ALL
;который будет намного быстрее чем CURSOR
:
DECLARE @MatchID int; --Guessed data type; will need a value
DECLARE @SQL nvarchar(MAX),
@CRLF nchar(2) = NCHAR(13) + NCHAR(10);
SET @SQL = STUFF((SELECT @CRLF +
N'UNION ALL' + @CRLF +
N'SELECT N' + QUOTENAME(s.[name],'''') + N' AS SchemaName,' + @CRLF +
N' N' + QUOTENAME(t.[name],'''') + N' AS TableName,' + @CRLF +
N' COUNT(*) AS RowCount' + @CRLF +
N'FROM ' + QUOTENAME(s.[name]) + N'.' + QUOTENAME(t.[name]) + @CRLF +
N'WHERE MATCH_ID = @MatchID'
FROM sys.schemas s
JOIN sys.tables t ON s.schema_id = t.schema_id
JOIN sys.columns c ON t.object_id = c.object_id
WHERE c.[name] = N'MATCH_ID'
ORDER BY t.[name]
FOR XML PATH(N''),TYPE).value('.','nvarchar(MAX)'),1,13,N'') + N';';
--SELECT @SQL; --Your best friend
EXEC sp_executesql @SQL, N'@MatchID int', @MatchID;
Поскольку я не могу это проверить, используйте своего «лучшего друга», если у вас есть какие-либо синтаксические ошибки, или вы не совсем получаетеожидаемых результатов.