Files
sql-scripts/check idx structure.sql
Thierry Schork 7cf858256a initial commit
2022-12-30 12:10:12 +01:00

76 lines
3.0 KiB
Transact-SQL

USE [Arizona]
DECLARE @idxName VARCHAR(100) = 'NCIX_entry_COL_ET_reconciliation_status'
DECLARE @idxChk TABLE ([TblName] NVARCHAR(128),
[SchemaTbl] NVARCHAR(257),
[IndexName] NVARCHAR(128),
[IsPrimaryKey] BIT,
[IsUniqueConstraint] BIT,
[IsUnique] BIT,
[ColName] NVARCHAR(128),
[IsComputedCol] BIT,
[IsIncludedCol] BIT,
[keyOrdinal] TINYINT,
[FilterDefinition] NVARCHAR(MAX));
INSERT INTO @idxChk ([TblName],
[SchemaTbl],
[IndexName],
[IsPrimaryKey],
[IsUniqueConstraint],
[IsUnique],
[ColName],
[IsComputedCol],
[IsIncludedCol],
[keyOrdinal],
[FilterDefinition])
SELECT [o].[name] AS [TblName],
[s].[name] + '.' + [o].[name] AS [SchemaTbl],
[i].[name] AS [IndexName],
[i].[is_primary_key] AS [IsPrimaryKey],
[i].[is_unique_constraint] AS [IsUniqueConstraint],
[i].[is_unique] AS [IsUnique],
[c].[name] AS [ColName],
[c].[is_computed] AS [IsComputedCol],
[ic].[is_included_column] AS [IsIncludedCol],
[ic].[key_ordinal] AS [keyOrdinal],
[i].[filter_definition] AS [FilterDefinition]
FROM [sys].[objects] [o]
INNER JOIN [sys].[schemas] [s]
ON [o].[schema_id] = [s].[schema_id]
INNER JOIN [sys].[columns] [c]
ON [o].[object_id] = [c].[object_id]
INNER JOIN [sys].[indexes] [i]
ON [c].[object_id] = [i].[object_id]
INNER 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 [i].[name] = @idxName
AND [c].[is_computed] = 0
AND [ic].[is_included_column] = 0;
IF EXISTS(SELECT 1 FROM @idxChk [ic]) -- 'index exists
BEGIN
IF EXISTS( SELECT 1 FROM @idxChk [ic] WHERE [ic].[ColName]='ET_reconciliation_status' AND [ic].[keyOrdinal]=1)
AND EXISTS(SELECT 1 FROM @idxChk [ic] WHERE [ic].[ColName]='ET_account' AND [ic].[keyOrdinal] = 2)
AND EXISTS(SELECT 1 FROM @idxChk [ic] WHERE [ic].[ColName]='ET_document_header' AND [ic].[keyOrdinal] = 3)
BEGIN
PRINT 'index '+@idxName+' is as expected';
END
ELSE
BEGIN
PRINT 'DROP INDEX '+@idxName+' ON dbo.[Entry];';
--EXEC('DROP INDEX '+@idxName+' ON dbo.[Entry];')
END
END
IF INDEXPROPERTY(OBJECT_ID('dbo.Entry'), 'NCIX_entry_COL_ET_reconciliation_status', 'IndexID') IS NULL
BEGIN
PRINT 'idx NCIX_entry_COL_ET_reconciliation_status create';
--CREATE NONCLUSTERED INDEX NCIX_Entry_COL_ET_reconciliation_status
--ON [dbo].[Entry] ([ET_reconciliation_status], [ET_account], [ET_document_header])
--INCLUDE ([ET_debit_base_amount], [ET_credit_base_amount], [ET_reconciliation_base_amount]);
END
GO