170 lines
4.8 KiB
Transact-SQL
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; |