May 17, 2026, 11:40 PM
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
-- tworzy skrypt do tworzenia indeksów,
|
||||
--bardzo przydatny do przenoszenia bazy wraz z obiektami albo do odgrywania brakujących indeksów
|
||||
|
||||
SELECT ' CREATE ' +
|
||||
CASE
|
||||
WHEN I.is_unique = 1 THEN ' UNIQUE '
|
||||
ELSE ''
|
||||
END +
|
||||
I.type_desc COLLATE DATABASE_DEFAULT + ' INDEX ' +
|
||||
I.name + ' ON ' +
|
||||
SCHEMA_NAME(T.schema_id) + '.' + T.name + ' ( ' +
|
||||
KeyColumns + ' ) ' +
|
||||
ISNULL(' INCLUDE (' + IncludedColumns + ' ) ', '') +
|
||||
ISNULL(' WHERE ' + I.filter_definition, '') + ' WITH ( ' +
|
||||
CASE
|
||||
WHEN I.is_padded = 1 THEN ' PAD_INDEX = ON '
|
||||
ELSE ' PAD_INDEX = OFF '
|
||||
END + ',' +
|
||||
'FILLFACTOR = ' + CONVERT(
|
||||
CHAR(5),
|
||||
CASE
|
||||
WHEN I.fill_factor = 0 THEN 100
|
||||
ELSE I.fill_factor
|
||||
END
|
||||
) + ',' +
|
||||
-- default value
|
||||
'SORT_IN_TEMPDB = OFF ' + ',' +
|
||||
CASE
|
||||
WHEN I.ignore_dup_key = 1 THEN ' IGNORE_DUP_KEY = ON '
|
||||
ELSE ' IGNORE_DUP_KEY = OFF '
|
||||
END + ',' +
|
||||
CASE
|
||||
WHEN ST.no_recompute = 0 THEN ' STATISTICS_NORECOMPUTE = OFF '
|
||||
ELSE ' STATISTICS_NORECOMPUTE = ON '
|
||||
END + ',' +
|
||||
' ONLINE = OFF ' + ',' +
|
||||
CASE
|
||||
WHEN I.allow_row_locks = 1 THEN ' ALLOW_ROW_LOCKS = ON '
|
||||
ELSE ' ALLOW_ROW_LOCKS = OFF '
|
||||
END + ',' +
|
||||
CASE
|
||||
WHEN I.allow_page_locks = 1 THEN ' ALLOW_PAGE_LOCKS = ON '
|
||||
ELSE ' ALLOW_PAGE_LOCKS = OFF '
|
||||
END + ' ) ON [' +
|
||||
DS.name + ' ] ' + CHAR(13) + CHAR(10) + ' GO' [CreateIndexScript]
|
||||
FROM sys.indexes I
|
||||
JOIN sys.tables T
|
||||
ON T.object_id = I.object_id
|
||||
JOIN sys.sysindexes SI
|
||||
ON I.object_id = SI.id
|
||||
AND I.index_id = SI.indid
|
||||
JOIN (
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT IC2.object_id,
|
||||
IC2.index_id,
|
||||
STUFF(
|
||||
(
|
||||
SELECT ' , ' + C.name + CASE
|
||||
WHEN MAX(CONVERT(INT, IC1.is_descending_key))
|
||||
= 1 THEN
|
||||
' DESC '
|
||||
ELSE
|
||||
' ASC '
|
||||
END
|
||||
FROM sys.index_columns IC1
|
||||
JOIN sys.columns C
|
||||
ON C.object_id = IC1.object_id
|
||||
AND C.column_id = IC1.column_id
|
||||
AND IC1.is_included_column =
|
||||
0
|
||||
WHERE IC1.object_id = IC2.object_id
|
||||
AND IC1.index_id = IC2.index_id
|
||||
GROUP BY
|
||||
IC1.object_id,
|
||||
C.name,
|
||||
index_id
|
||||
ORDER BY
|
||||
MAX(IC1.key_ordinal)
|
||||
FOR XML PATH('')
|
||||
),
|
||||
1,
|
||||
2,
|
||||
''
|
||||
) KeyColumns
|
||||
FROM sys.index_columns IC2
|
||||
--WHERE IC2.Object_id = object_id('Person.Address') --Comment for all tables
|
||||
GROUP BY
|
||||
IC2.object_id,
|
||||
IC2.index_id
|
||||
) tmp3
|
||||
)tmp4
|
||||
ON I.object_id = tmp4.object_id
|
||||
AND I.Index_id = tmp4.index_id
|
||||
JOIN sys.stats ST
|
||||
ON ST.object_id = I.object_id
|
||||
AND ST.stats_id = I.index_id
|
||||
JOIN sys.data_spaces DS
|
||||
ON I.data_space_id = DS.data_space_id
|
||||
JOIN sys.filegroups FG
|
||||
ON I.data_space_id = FG.data_space_id
|
||||
LEFT JOIN (
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT IC2.object_id,
|
||||
IC2.index_id,
|
||||
STUFF(
|
||||
(
|
||||
SELECT ' , ' + C.name
|
||||
FROM sys.index_columns IC1
|
||||
JOIN sys.columns C
|
||||
ON C.object_id = IC1.object_id
|
||||
AND C.column_id = IC1.column_id
|
||||
AND IC1.is_included_column =
|
||||
1
|
||||
WHERE IC1.object_id = IC2.object_id
|
||||
AND IC1.index_id = IC2.index_id
|
||||
GROUP BY
|
||||
IC1.object_id,
|
||||
C.name,
|
||||
index_id
|
||||
FOR XML PATH('')
|
||||
),
|
||||
1,
|
||||
2,
|
||||
''
|
||||
) IncludedColumns
|
||||
FROM sys.index_columns IC2
|
||||
--WHERE IC2.Object_id = object_id('Person.Address') --Comment for all tables
|
||||
GROUP BY
|
||||
IC2.object_id,
|
||||
IC2.index_id
|
||||
) tmp1
|
||||
WHERE IncludedColumns IS NOT NULL
|
||||
) tmp2
|
||||
ON tmp2.object_id = I.object_id
|
||||
AND tmp2.index_id = I.index_id
|
||||
WHERE I.is_primary_key = 0
|
||||
AND I.is_unique_constraint = 0
|
||||
--AND T.name NOT LIKE 'mt_%'
|
||||
--AND I.name NOT LIKE 'mt_%'
|
||||
--AND I.Object_id = object_id('Person.Address') --Comment for all tables
|
||||
--AND I.name = 'IX_Address_PostalCode' --comment for all indexes
|
||||
|
||||
Reference in New Issue
Block a user