Saltar al contenido

¿Cómo recorrer todas las tablas SQL?

Solución:

Utilice este procedimiento almacenado del sistema

sp_MSforeachtable @command1="select count(*) from ?"

Código de muestra

Nota:

  • Esta sp_MSforeachtable es un procedimiento almacenado indocumentado.
  • No es compatible con Azure SQL (según el comentario a continuación).

Quizás esto es lo que estás buscando

DECLARE @NAME VARCHAR(100)
DECLARE @SQL NVARCHAR(300)

DECLARE CUR CURSOR FOR
  SELECT NAME
  FROM   SYS.TABLES
  WHERE  TYPE = 'U'
         AND SCHEMA_ID = 1

OPEN CUR

FETCH NEXT FROM CUR INTO @NAME

WHILE @@FETCH_STATUS = 0
  BEGIN
      SET @SQL = 'SELECT * FROM WS_LIVE.DBO.'[email protected]+' WHERE GCRECORD IS NOT NULL'

      PRINT @SQL
      EXEC Sp_executesql
        @SQL

      FETCH NEXT FROM CUR INTO @NAME
  END

CLOSE CUR

DEALLOCATE CUR 

Algunas veces, usar Cursor en SQL es un riesgo. A continuación, la consulta SQL recorrerá todas las tablas en una base de datos seleccionada sin usar CURSOR.

USE TEST
Declare @TableName nvarchar(256) 
SET @TableName=""

WHILE @TableName IS NOT NULL
BEGIN
    SET @TableName = 
    (
        SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
        FROM    INFORMATION_SCHEMA.TABLES
        WHERE       TABLE_TYPE = 'BASE TABLE'
            AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
    )
print @TableName -- Your logic will come here
END
GO

Las declaraciones SQL anteriores imprimirán todas las tablas en el lado del PRUEBA base de datos. Entonces, en lugar de imprimir la declaración de la tabla, puede dar su propia lógica sql como lo que desea hacer con el bucle de cada tabla y @Nombre de la tabla contendrá el nombre de la tabla en el ciclo actual.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *