Comparar Filas del resultado de una Consulta en SQL Server Enterprise 2017
Publicado por Ariagna (21 intervenciones) el 27/05/2020 03:03:38
Quiero realizar una comparación entre filas del resultado de una consulta, ¿como podría hacerlo en SQL Server 2017? mi consulta es la siguiente:
Quiero obtener los índices que tengan las mismas columnas y en el mismo orden, en la consulta implemento la función LAG, pero al momento de comparar no se como realizarlo, muchas gracias de ante mano.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
SELECT SYS.TABLES.NAME AS NOMBRETABLA,SYS.INDEXES.NAME AS NOMBREINDICE,
STUFF((SELECT ', ' + COLS.NAME + CASE WHEN NDX_COLS.IS_DESCENDING_KEY=1 THEN ' DESC'
ELSE ' ASC' END
FROM SYS.TABLES TBLS
INNER JOIN SYS.INDEX_COLUMNS NDX_COLS ON (NDX_COLS.OBJECT_ID = TBLS.OBJECT_ID)
INNER JOIN SYS.COLUMNS COLS ON (COLS.OBJECT_ID = TBLS.OBJECT_ID) AND (NDX_COLS.COLUMN_ID= COLS.COLUMN_ID)
WHERE TBLS.NAME = SYS.TABLES.NAME AND
(SYS.INDEXES.OBJECT_ID = NDX_COLS.OBJECT_ID) AND (SYS.INDEXES.INDEX_ID = NDX_COLS.INDEX_ID)
ORDER BY NDX_COLS.KEY_ORDINAL
FOR XML PATH('')),1,1,'') COLUMN_INDX,
LAG(STUFF((SELECT ', ' + COLS.NAME + CASE WHEN NDX_COLS.IS_DESCENDING_KEY=1 THEN ' DESC'
ELSE ' ASC' END
FROM SYS.TABLES TBLS
INNER JOIN SYS.INDEX_COLUMNS NDX_COLS ON (NDX_COLS.OBJECT_ID = TBLS.OBJECT_ID)
INNER JOIN SYS.COLUMNS COLS ON (COLS.OBJECT_ID = TBLS.OBJECT_ID) AND (NDX_COLS.COLUMN_ID= COLS.COLUMN_ID)
WHERE TBLS.NAME = SYS.TABLES.NAME AND
(SYS.INDEXES.OBJECT_ID = NDX_COLS.OBJECT_ID) AND (SYS.INDEXES.INDEX_ID = NDX_COLS.INDEX_ID)
ORDER BY NDX_COLS.KEY_ORDINAL
FOR XML PATH('')),1,1,'')) OVER (ORDER BY SYS.INDEXES.NAME) COLUMNAS_INDX_COMP
FROM SYS.TABLES
INNER JOIN SYS.INDEX_COLUMNS ON (SYS.INDEX_COLUMNS.OBJECT_ID = SYS.TABLES.OBJECT_ID)
INNER JOIN SYS.INDEXES ON (SYS.INDEXES.OBJECT_ID = SYS.INDEX_COLUMNS.OBJECT_ID) AND (SYS.INDEXES.INDEX_ID = SYS.INDEX_COLUMNS.INDEX_ID)
INNER JOIN SYS.COLUMNS ON (SYS.COLUMNS.OBJECT_ID = SYS.TABLES.OBJECT_ID) AND (SYS.INDEX_COLUMNS.COLUMN_ID=SYS.COLUMNS.COLUMN_ID)
WHERE SYS.INDEXES.IS_PRIMARY_KEY=0
GROUP BY SYS.TABLES.NAME, SYS.INDEXES.NAME, SYS.INDEXES.OBJECT_ID, SYS.INDEXES.INDEX_ID
ORDER BY SYS.INDEXES.NAME ASC;
Quiero obtener los índices que tengan las mismas columnas y en el mismo orden, en la consulta implemento la función LAG, pero al momento de comparar no se como realizarlo, muchas gracias de ante mano.
Valora esta pregunta


0