Deseamos proponerte la mejor respuesta que encontramos online. Queremos que te resulte de mucha utilidad y si puedes aportar algo que nos pueda ayudar a crecer hazlo con libertad.
Solución:
Prueba este –
SET NOCOUNT ON;
IF OBJECT_ID (N'tempdb.dbo.#temp') IS NOT NULL
DROP TABLE #temp
CREATE TABLE #temp
(
[COUNT] INT
, DB VARCHAR(50)
)
DECLARE @TableName NVARCHAR(50)
SELECT @TableName = '[dbo].[CUSTOMERS]'
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = STUFF((
SELECT CHAR(13) + 'SELECT ''' + name + ''', COUNT(1) FROM [' + name + '].' + @TableName
FROM sys.databases
WHERE OBJECT_ID('[' + name + ']' + '.' + @TableName) IS NOT NULL
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
INSERT INTO #temp (DB, [COUNT])
EXEC sys.sp_executesql @SQL
SELECT *
FROM #temp t
Salida (por ejemplo, en AdventureWorks
) –
COUNT DB
----------- --------------------------------------------------
19972 AdventureWorks2008R2
19975 AdventureWorks2012
19472 AdventureWorks2008R2_Live
Consulta directa
EXECUTE sp_MSForEachDB
'USE ?; SELECT DB_NAME()AS DBName,
COUNT(1)AS [Count] FROM CUSTOMERS'
Esta consulta le mostrará lo que desea ver, pero también generará errores para cada base de datos sin una tabla llamada “CLIENTES”. Tendrá que elaborar una lógica para manejar eso.
Raj
Qué tal algo como esto:
DECLARE c_db_names CURSOR FOR
SELECT name
FROM sys.databases
WHERE name NOT IN('master', 'tempdb') --might need to exclude more dbs
OPEN c_db_names
FETCH c_db_names INTO @db_name
WHILE @@Fetch_Status = 0
BEGIN
EXEC('
INSERT INTO #report
SELECT
''' + @db_name + '''
,COUNT(*)
FROM ' + @db_name + '..linkfile
')
FETCH c_db_names INTO @db_name
END
CLOSE c_db_names
DEALLOCATE c_db_names
SELECT * FROM #report
valoraciones y comentarios
Nos puedes añadir valor a nuestra información colaborando tu experiencia en las aclaraciones.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)