Los no-documentados: sp_MSforeachdb y sp_MSforeachtable.
Existen dos procedimientos almacenados no documentados de SQL Server que te van a facilitar mucho la vida como DBA o DBD de SQL Server: sp_MSforeachdb y sp_MSforeachtable. ¡Vamos a conocerlos un poco mejor y a ver cómo usarlos!
sp_MSforeachdb es un SP que te va a permitir recorrer todas las bases de datos de la instancia ejecutando el comando que indiques.
EXEC sp_MSforeachdb @command
El parámetro @command es un string donde indicarás la sentencia T-SQL que quieres que se ejecute en cada una de las bases de datos. En caso de querer o necesitar referencia a la base de datos, tendrás que utilizar ?.
Ejemplo: Listar todas las tablas de cada una de las bases de datos de mi instancia. En este ejemplo, antes de listar las tablas, se indica la base de datos a la que se hace referencia
DECLARE @sql varchar(1000)
SELECT @sql = 'USE ?
SELECT ''?'' as DB
select SCHEMA_NAME(schema_id) as Esquema, [name] as tabla from sys.tables order by Esquema, tabla'
EXEC sp_MSforeachdb @sql
Visto este, podréis intuir qué hace el otro SP que mencionabamos: sp_MSforeachtable. Este SP te va a permitir recorrer todas las tablas de una base de datos y aplicar la sentencia T-SQL que especifiques. Funciona igual que el anterior.
EXEC sp_MSforeachtable @command
- @command: es la sentencia T-SQL que se aplicará por cada tabla
- ? : caracter a utilizar para referenciar a la tabla que corresponda
Ejemplo: Listar todas las tablas de una base de datos, indicando el número de registros de cada una de ellas.
DECLARE @sql varchar(1000)
SELECT @sql = 'SELECT ''?'' TableName, Count(1) NumRegistros FROM ?'
EXEC sp_MSforeachtable @sql
Ahora que ya os he presentado a estos dos secretos a voces, los podemos utilizar sin problemas en las siguientes entradas de blog. Como os he comentado antes, usándolos, vuestra tareas serán más sencillas. ¿Los conocíais?