166 lines
8.1 KiB
PL/PgSQL
166 lines
8.1 KiB
PL/PgSQL
/*
|
|
Server: sun791aps.sunstore.ch
|
|
Format: GCM
|
|
Business: TPPHAR
|
|
type: PROD
|
|
Version: 21.3.11111.00064
|
|
|
|
02.11.2022, TSC
|
|
*/
|
|
USE [Arizona];
|
|
|
|
BEGIN TRANSACTION;
|
|
SET XACT_ABORT ON;
|
|
SET NOCOUNT ON;
|
|
|
|
DECLARE @index_to_drop TABLE ([columns_in_index] VARCHAR(MAX) NOT NULL,
|
|
[index_name] VARCHAR(500) NULL);
|
|
|
|
INSERT @index_to_drop ([columns_in_index])
|
|
VALUES ('ET_APS_TS'),
|
|
('ET_entry_address'),
|
|
('ET_entry_type'),
|
|
('ET_master_ID'),
|
|
('ET_predefined_entry'),
|
|
('ET_sales_tax_code'),
|
|
('ET_bmc_user_profile'),
|
|
('ET_currency');
|
|
|
|
/* find index name with defined columns */
|
|
WITH [ColInfo]
|
|
AS (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],
|
|
[i].[filter_definition] AS [FilterDefinition],
|
|
CHAR(13) + CHAR(10) AS [crlf],
|
|
';' + CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10) AS [crlfgo]
|
|
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 [o].[name] = 'entry'
|
|
--AND i.filter_definition IS NOT NULL
|
|
)
|
|
|
|
--SELECT itd.columns_in_index
|
|
-- ,itd.index_name
|
|
-- ,lst.IndexName
|
|
-- ,lst.IndexColumns
|
|
-- ,lst.IncludedColumns
|
|
UPDATE [itd]
|
|
SET [itd].[index_name] = [lst].[IndexName]
|
|
FROM ( SELECT DISTINCT [x].[TblName],
|
|
[x].[IndexName],
|
|
[x].[IsPrimaryKey],
|
|
[x].[IsUniqueConstraint],
|
|
[x].[IsUnique],
|
|
--,size.IndexSizeKB
|
|
[c].[IndexColumns],
|
|
[ci].[IncludedColumns],
|
|
[cc].[ComputedColumns],
|
|
[x].[FilterDefinition],
|
|
[x].[crlf] + '-- ' + [x].[IndexName] + [x].[crlf] +
|
|
--check drop
|
|
'IF INDEXPROPERTY(OBJECT_ID(''' + [x].[SchemaTbl] + '''), ''' + [x].[IndexName]
|
|
+ ''' , ''IndexID'' ) IS NOT NULL BEGIN;' + [x].[crlf]
|
|
+ CASE
|
|
WHEN [x].[IsPrimaryKey] = 1 THEN NULL
|
|
WHEN [x].[IsUniqueConstraint] = 1 THEN
|
|
--drop statement
|
|
' ALTER TABLE ' + [x].[SchemaTbl] + ' DROP CONSTRAINT ' + [x].[IndexName] + ';'
|
|
+ [x].[crlf] + 'END' + [x].[crlfgo]
|
|
--check create
|
|
+ 'IF INDEXPROPERTY(OBJECT_ID(''' + [x].[SchemaTbl] + '''), ''' + [x].[IndexName]
|
|
+ ''' , ''IndexID'' ) IS NULL BEGIN;' + [x].[crlf] +
|
|
--create statement
|
|
+' ALTER TABLE '
|
|
+ [x].[SchemaTbl] + ' ADD CONSTRAINT ' + [x].[IndexName] + ' UNIQUE ('
|
|
+ [c].[IndexColumns] + ');' + [x].[crlf] + 'END' + [x].[crlfgo]
|
|
ELSE
|
|
--drop statement
|
|
' DROP INDEX ' + [x].[SchemaTbl] + '.' + [x].[IndexName] + ';' + [x].[crlf]
|
|
+ 'END' + [x].[crlfgo]
|
|
--check create
|
|
+ 'IF INDEXPROPERTY(OBJECT_ID(''' + [x].[SchemaTbl] + '''), ''' + [x].[IndexName]
|
|
+ ''' , ''IndexID'' ) IS NULL BEGIN;' + [x].[crlf] +
|
|
--create statement
|
|
+' CREATE '
|
|
+ CASE
|
|
WHEN [x].[IsUnique] = 1 THEN 'UNIQUE '
|
|
ELSE '' END + 'INDEX ' + [x].[IndexName] + ' ON ' + [x].[SchemaTbl] + '('
|
|
+ [c].[IndexColumns] + ')'
|
|
+ ISNULL(' INCLUDE(' + [ci].[IncludedColumns] + ')', '')
|
|
+ ISNULL(' WHERE ' + [x].[FilterDefinition], '') + ';' + [x].[crlf] + 'END'
|
|
+ [x].[crlfgo] END AS [DropCreateSQL]
|
|
FROM [ColInfo] [x]
|
|
CROSS APPLY ( SELECT STUFF([sq].[strXML], 1, 2, '') AS [IndexColumns]
|
|
FROM ( SELECT ', ' + ISNULL([x2].[ColName], '')
|
|
FROM [ColInfo] [x2]
|
|
WHERE [x].[TblName] = [x2].[TblName]
|
|
AND [x].[IndexName] = [x2].[IndexName]
|
|
AND [x2].[IsIncludedCol] = 0
|
|
ORDER BY [x2].[key_ordinal]
|
|
FOR XML PATH('')) [sq]([strXML]) ) [c]
|
|
OUTER APPLY ( SELECT STUFF([sq].[strXML], 1, 2, '') AS [IncludedColumns]
|
|
FROM ( SELECT ', ' + ISNULL([x2].[ColName], '')
|
|
FROM [ColInfo] [x2]
|
|
WHERE [x].[TblName] = [x2].[TblName]
|
|
AND [x].[IndexName] = [x2].[IndexName]
|
|
AND [x2].[IsIncludedCol] = 1
|
|
ORDER BY [x2].[key_ordinal]
|
|
FOR XML PATH('')) [sq]([strXML]) ) [ci]
|
|
OUTER APPLY ( SELECT STUFF([sq].[strXML], 1, 2, '') AS [ComputedColumns]
|
|
FROM ( SELECT ', ' + ISNULL([x2].[ColName], '')
|
|
FROM [ColInfo] [x2]
|
|
WHERE [x].[TblName] = [x2].[TblName]
|
|
AND [x].[IndexName] = [x2].[IndexName]
|
|
AND [x2].[IsComputedCol] = 1
|
|
ORDER BY [x2].[key_ordinal]
|
|
FOR XML PATH('')) [sq]([strXML]) ) [cc] ) [lst]
|
|
INNER JOIN @index_to_drop [itd]
|
|
ON [lst].[IndexColumns] = [itd].[columns_in_index];
|
|
|
|
SELECT *
|
|
FROM @index_to_drop [itd];
|
|
|
|
/* declare variables */
|
|
DECLARE @index_name VARCHAR(MAX);
|
|
|
|
DECLARE [drop_index] CURSOR LOCAL FAST_FORWARD READ_ONLY FOR
|
|
SELECT [itd].[index_name]
|
|
FROM @index_to_drop [itd]
|
|
WHERE [itd].[index_name] IS NOT NULL;
|
|
|
|
OPEN [drop_index];
|
|
|
|
FETCH NEXT FROM [drop_index]
|
|
INTO @index_name;
|
|
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
EXEC ('DROP INDEX ' + @index_name + ' ON dbo.entry;');
|
|
|
|
FETCH NEXT FROM [drop_index]
|
|
INTO @index_name;
|
|
END;
|
|
|
|
CLOSE [drop_index];
|
|
DEALLOCATE [drop_index];
|
|
|
|
|
|
ROLLBACK TRANSACTION;
|