domingo, noviembre 24, 2024

Procedimiento no documentado de MSSQL sp_MSforeachtable

Este procedimiento nos evita tener que crear un cursor para recorrer todas nuestras tablas, y en una sola línea podemos hacer muchas cosas.

Antes de empezar a utilizar este procedimiento hay que tener mucho cuidado con las repercuciones que nos pueda ocacionar. Ya que aplica a TODAS las tablas de la base de datos.

Para utilizarlo debemos hacer algo como lo siguiente:

–Hace un select a todas las tablas
EXEC sp_MSforeachtable 'select * from ?'
–Cuenta todas los registros de las tablas
EXEC sp_MSforeachtable 'select count(*) from ?'
–Elimina todos los registros de las tablas
Cuidado con este ejemplo, vamos a perder todos los datos, (limpieza general)
EXEC sp_MSforeachtable 'truncate table ?'
–Retorna el nombre y creador de todas las tablas
EXEC sp_MSforeachtable @command1=»print '?'»

El signo ? representa el nombre de la tabla.

Otro ejemplo mas complejo podría ser:

–Creamos una tabla temporal
create table #rowcount (tablename varchar(128), rowcnt int)
–Inserta en la tabla temporal un select count(*)
exec sp_MSforeachtable
'insert into #rowcount select ''?'', count(*) from ?'
–Hacemos el select en la tabla temporal para ver el resultado
select top 5 * from #rowcount
order by tablename
–Eliminamos la tabla temporal
drop table #rowcount

Estos fueron solo ejemplos, pero bien podrías hacer muchas otras cosas dependiendo de lo que quieras hacer.

Roy Rojas
Roy Rojashttp://www.dotnetcr.com
Con más de 20 años de experiencia en programación, experto en lenguajes .NET, VB, C#, ASP.NET, Xamarin, XCode, DBA en SQL Server. Creador de dotnetcr.com, sitio web para programadores en español. royrojas.com | dotnetcr.com | GitHub
Roy Rojas
Roy Rojashttp://www.dotnetcr.com
Con más de 20 años de experiencia en programación, experto en lenguajes .NET, VB, C#, ASP.NET, Xamarin, XCode, DBA en SQL Server. Creador de dotnetcr.com, sitio web para programadores en español. royrojas.com | dotnetcr.com | GitHub