Files
sql-scripts/OCTPDBA-414 - proc to align indexes/generate inserts.sql
2023-02-13 14:13:43 +01:00

170 lines
4.8 KiB
Transact-SQL

USE Arizona;
GO
DELETE FROM upd.IA_IndexesAlignementActions
WHERE IA_schema_name = 'dbo.Criteria';
BEGIN TRANSACTION;
WITH ColInfo
AS (SELECT TblName = o.name,
SchemaTbl = s.name + '.' + o.name,
IndexName = i.name,
s.name AS schemaName,
IsPrimaryKey = i.is_primary_key,
IsUniqueConstraint = i.is_unique_constraint,
IsUnique = i.is_unique,
CASE
WHEN i.type = 1 THEN
1
ELSE
0
END AS is_clustered,
ColName = c.name,
IsComputedCol = c.is_computed,
IsIncludedCol = ic.is_included_column,
ic.key_ordinal,
FilterDefinition = i.filter_definition,
i.object_id,
i.ignore_dup_key,
i.fill_factor,
i.is_padded
FROM sys.objects o
JOIN sys.schemas s
ON o.schema_id = s.schema_id
JOIN sys.columns c
ON o.object_id = c.object_id
JOIN sys.indexes i
ON c.object_id = i.object_id
JOIN sys.index_columns ic
ON i.index_id = ic.index_id
AND o.object_id = ic.object_id
AND c.column_id = ic.column_id
WHERE o.name = 'criteria'
AND s.name = 'dbo')
SELECT DISTINCT
'
INSERT INTO arizona.upd.IA_IndexesAlignementActions
(
IA_executionDate,
IA_schema_name,
IA_table_name,
IA_columns_name,
IA_is_clustered,
IA_is_unique,
IA_included_columns,
IA_is_to_be_deleted,
IA_is_to_be_recreated,
IA_expected_index_name,
IA_foundIndexName,
IA_wasIndexFound,
IA_wasCreated,
IA_wasRenamed,
IA_wasDeleted,
IA_wasRecreated,
IA_includedColumnsMatch,
IA_actualColumns,
IA_actualIncludedColumns,
IA_statusMsg,
IA_index_options
)
SELECT
NULL as IA_executionDate,
''' + x.schemaName + ''' as IA_schema_name,
''' + x.TblName + ''' as IA_table_name,
''' + c.IndexColumns + ''' as IA_columns_name,
0 as IA_is_clustered,
' + CASE
WHEN x.IsUnique = 0 THEN
'0'
ELSE
'1'
END + ' as IA_is_unique,
' + CASE
WHEN ci.IncludedColumns IS NOT NULL THEN
'''' + ci.IncludedColumns + ''''
ELSE
'NULL'
END + ' as IA_included_columns,
0 as IA_is_to_be_deleted,
0 as IA_is_to_be_recreated,
''' + x.IndexName
+ ''' as IA_expected_index_name,
NULL as IA_foundIndexName,
0 as IA_wasIndexFound,
0 as IA_wasCreated,
0 as IA_wasRenamed,
0 as IA_wasDeleted,
0 as IA_wasRecreated,
NULL as IA_includedColumnsMatch,
NULL as IA_actualColumns,
NULL as IA_actualIncludedColumns,
NULL as IA_statusMsg,
''' + CASE
WHEN INDEXPROPERTY(x.object_id, x.IndexName, 'IsStatistics') = 1 THEN
'STATISTICS_NORECOMPUTE = ON, '
ELSE
'STATISTICS_NORECOMPUTE = OFF, '
END + CASE
WHEN x.ignore_dup_key = 1 THEN
'IGNORE_DUP_KEY = ON, '
ELSE
'IGNORE_DUP_KEY = OFF, '
END + CASE
WHEN x.is_padded = 1 THEN
'PAD_INDEX = ON,'
ELSE
''
END + 'SORT_IN_TEMPDB = OFF, FILLFACTOR =' + CAST(x.fill_factor AS VARCHAR(3))
+ ''' as IA_index_options
WHERE NOT EXISTS(
SELECT 1
FROM arizona.upd.IA_IndexesAlignementActions s
WHERE s.IA_executionDate IS NULL
AND s.IA_schema_name = ''' + x.schemaName + '''
AND s.IA_table_name = ''' + x.TblName + '''
AND s.IA_columns_name = ''' + c.IndexColumns + '''
' + CASE
WHEN ci.IncludedColumns IS NOT NULL THEN
'AND s.IA_included_columns = ''' + ci.IncludedColumns + ''' '
ELSE
''
END + '
)
' AS cmd,
x.IndexName,
c.IndexColumns,
ci.IncludedColumns
FROM ColInfo x
CROSS APPLY
(
SELECT IndexColumns = STUFF(sq.strXML, 1, 2, '')
FROM
(
SELECT ', ' + ISNULL(x2.ColName, '')
FROM ColInfo x2
WHERE x.TblName = x2.TblName
AND x.schemaName = x2.schemaName
AND x.IndexName = x2.IndexName
AND x2.IsIncludedCol = 0
ORDER BY x2.key_ordinal
FOR XML PATH('')
) sq(strXML)
) c
OUTER APPLY
(
SELECT IncludedColumns = STUFF(sq.strXML, 1, 2, '')
FROM
(
SELECT ', ' + ISNULL(x2.ColName, '')
FROM ColInfo x2
WHERE x.TblName = x2.TblName
AND x.schemaName = x2.schemaName
AND x.IndexName = x2.IndexName
AND x2.IsIncludedCol = 1
ORDER BY x2.key_ordinal
FOR XML PATH('')
) sq(strXML)
) ci;
ROLLBACK TRANSACTION;