En los últimos meses he aprendido
que es importante una tabla de números en secuencia que nos ayudará para muchas
cosas y no tenerlas que estar generándolas cada vez que la necesitemos;
ahora les mostraré algunas formas de generarlas y después para que podemos
utilizarlas.
Usando tablas del sistema :
IF OBJECT_ID('tablaNumeros') IS NOT NULL DROP TABLE tablaNumeros SELECT TOP 100000 IDENTITY(INT,1,1) AS id INTO tablaNumeros FROM master.sys.columns a CROSS JOIN master.sys.columns b SELECT * FROM tablaNumeros
Haciendo
cruces de tablas exponencialmente y ordenándolas:
;WITH c0 AS (SELECT 0 g UNION ALL SELECT 0) -- 2 = SELECT 0 UNION ALL SELECT 0 ,c1 AS (SELECT 0 g FROM c0 a CROSS JOIN c0 b) -- 4 = 2 x 2 ,c2 AS (SELECT 0 g FROM c1 a CROSS JOIN c1 b) -- 16 = 4 x 4 ,c3 AS (SELECT 0 g FROM c2 a CROSS JOIN c2 b) -- 256 = 16 x 16 ,c4 AS (SELECT 0 g FROM c3 a CROSS JOIN c3 b) -- 65,536 = 256 x 256 ,c5 AS (SELECT 0 g FROM c4 a CROSS JOIN c4 b) -- 4,294,967,296= 65,536 x 65,536 ,tablaNumeros AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS n FROM c5) SELECT TOP (5349) n FROM tablaNumeros ORDER BY n;
Otra forma:
;WITH tablaNumeros (n) AS ( SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) a(n) CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) b(n) CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) c(n) ) SELECT * FROM tablaNumeros;
Recordemos
que a partir de SQL SERVER 2012 ya podemos crear una tabla de valores de la
siguiente manera:
SELECT a.*, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn FROM ( VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0) ) AS a(n)
Es por ello
que podemos obtener dichos resultados.
Más adelante
les mostrare como podemos darle uso a estas tablas de números.
SALUDOS
COMPARTE ESTA INFORMACION SI TE PARECIO INTERESANTE
0 comentarios:
Publicar un comentario