SQL Server proporciona un potente procedimiento almacenado del sistema llamado sp_msForEachTable que permite a los administradores de bases de datos realizar tareas en cada tabla de una base de datos con un solo comando. Sin embargo, hay una limitación con este procedimiento: intenta adaptarse a varios propietarios de objetos en una base de datos utilizando la sintaxis [propietario].[objeto]. Esto puede causar problemas cuando ciertos comandos no pueden manejar la cláusula de propiedad y solo pueden manejar un nombre de tabla simple.
Para abordar esta limitación, he creado una versión modificada del procedimiento sp_msForEachTable que elimina la cláusula de propietario del objeto. Este procedimiento modificado, llamado sp__ForEachTable, funciona solo para tablas propiedad del usuario actual. Dado que los objetos suelen ser propiedad del DBO y como administrador de la base de datos, usted es el DBO, esto no debería ser un problema en la mayoría de los casos.
Aquí hay un ejemplo de cómo se puede utilizar el procedimiento modificado:
EXEC sp__ForEachTable 'SELECT COUNT(*) FROM ?'Este comando ejecutará la instrucción SELECT especificada en cada tabla de la base de datos, devolviendo el recuento de filas en cada tabla.
Es importante tener en cuenta que el procedimiento modificado tiene algunas limitaciones. No maneja nombres de tabla que incluyan un espacio y no se admiten comandos que esperan un object_id en lugar de un nombre de tabla. Además, el ejemplo de uso de DBCC SHOWCONTIG solo funciona en SQL Server 2000.
El procedimiento sp__ForEachTable es parte de la serie “ForEach” de procedimientos almacenados, que incluye sp_msForEachDB (que opera a nivel de base de datos) y sp_msForEachWorker (una utilidad llamada por los otros dos). Estos procedimientos utilizan SQL dinámico para replicar comandos en cada tabla u objeto. Si está interesado en aprender más sobre SQL dinámico, le recomiendo que eche un vistazo a estos procedimientos para ver cómo se implementan.
Para obtener más información sobre el procedimiento original sp_msForEachTable, puede consultar los libros en línea de SQL Server. Tenga en cuenta que el procedimiento modificado, sp__ForEachTable, ha sido probado en SQL Server 7 y SQL Server 2000.
Gracias por leer y espero que este artículo le haya proporcionado una mejor comprensión de sp_msForEachTable de SQL Server y su versión modificada, sp__ForEachTable.