172 lines
5.0 KiB
Transact-SQL
172 lines
5.0 KiB
Transact-SQL
USE Arizona;
|
|
GO
|
|
|
|
DELETE FROM upd.IA_IndexAlignementActions
|
|
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_IndexAlignementActions
|
|
(
|
|
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,
|
|
IA_reference
|
|
)
|
|
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,
|
|
NULL as IA_reference
|
|
WHERE NOT EXISTS(
|
|
SELECT 1
|
|
FROM arizona.upd.IA_IndexAlignementActions 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; |