Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se proporcionan sugerencias esenciales para usar bucles T-SQL, reemplazar cursores y desarrollar soluciones relacionadas con Synapse SQL.
Propósito de los bucles WHILE
Synapse SQL admite el bucle WHILE para ejecutar repetidamente bloques de instrucciones. El bucle WHILE continúa siempre y cuando las condiciones especificadas se cumplan o hasta que el código termine específicamente el bucle con la palabra clave BREAK.
Los bucles de Synapse SQL son útiles para reemplazar los cursores definidos en código SQL. Afortunadamente, casi todos los cursores que están escritos en código SQL son de la variedad avance rápido y solo lectura. Por lo tanto, los bucles WHILE son una buena alternativa para reemplazar los cursores.
Reemplazo de cursores en Synapse SQL
Antes de profundizar, se debe considerar la siguiente pregunta: "¿Podría volver a escribirse este cursor para usar operaciones basadas en conjuntos?" En muchos casos, la respuesta es sí y suele ser el mejor enfoque. Una operación basada en conjuntos suele ejecutarse más rápido que un enfoque iterativo de fila por fila.
Los cursores de solo lectura de rápido avance se reemplazan fácilmente por una estructura de bucle. El código siguiente es un ejemplo sencillo. Este código de ejemplo actualiza las estadísticas de todas las tablas de la base de datos. Mediante la iteración a través de las tablas del bucle, cada comando se ejecuta en secuencia.
En primer lugar, cree una tabla temporal que contenga un número de fila único usado para identificar las instrucciones individuales:
CREATE TABLE #tbl
WITH
( DISTRIBUTION = ROUND_ROBIN
)
AS
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS Sequence
, [name]
, 'UPDATE STATISTICS '+QUOTENAME([name]) AS sql_code
FROM sys.tables
;
En segundo lugar, inicialice las variables necesarias para ejecutar el bucle:
DECLARE @nbr_statements INT = (SELECT COUNT(*) FROM #tbl)
, @i INT = 1
;
Ahora, recorra las instrucciones ejecutándolas de una en una:
WHILE @i <= @nbr_statements
BEGIN
DECLARE @sql_code NVARCHAR(4000) = (SELECT sql_code FROM #tbl WHERE Sequence = @i);
EXEC sp_executesql @sql_code;
SET @i +=1;
END
Finalmente, elimine la tabla temporal creada en el primer paso
DROP TABLE #tbl;
Pasos siguientes
Para obtener más sugerencias sobre desarrollo, vea la información general sobre desarrollo.