數據庫的索引查找

declare @name varchar(50);
declare @ALTER varchar(50);
SET @ALTER = ' ALTER TABLE ';
declare @CONSTRAINT varchar(50);
SET @CONSTRAINT = ' ADD CONSTRAINT ';
declare @PRIMARY varchar(50);
SET @PRIMARY = ' PRIMARY KEY ';
declare @UNIQUE varchar(50);
SET @UNIQUE = ' UNIQUE ';
declare @CREATE varchar(50);
SET @CREATE = ' CREATE ';
declare @INDEX varchar(50);
SET @INDEX = ' INDEX ';
declare @INCLUDE varchar(50);
SET @INCLUDE = ' INCLUDE (';
declare @ON varchar(50);
SET @ON = ' ON ';
declare @DESC varchar(50);
SET @DESC = ' DESC ';
declare @null varchar(50);
SET @null = '';
declare @qx varchar(50);
SET @qx = '(';
declare @hx varchar(50);
SET @hx = ')';
declare @qz varchar(50);
SET @qz = '[';
declare @hz varchar(50);
SET @hz = ']';
declare @dh varchar(50);
SET @dh = ',';
declare @d varchar(50);
SET @d = '.';
declare @tmp table (
DATABASENAME varchar(50),
Create_Index varchar(max),
ix_name varchar(max),
table_name varchar(max)
)
--執行sql語句變量
declare @STMT nvarchar(max) -- SQL to execute
declare cur_data SCROLL cursor for
SELECT Name FROM Master..SysDatabases ORDER BY Name
open cur_data
fetch next from cur_data into @name
while(@@fetch_status=0)
begin
SELECT @STMT ='BEGIN
WITH tx AS
(
SELECT a.object_id
,b.name AS schema_name
,a.name AS table_name
,c.name as ix_name
,c.is_unique AS ix_unique
,c.type_desc AS ix_type_desc
,d.index_column_id
,d.is_included_column
,e.name AS column_name
,f.name AS fg_name
,d.is_descending_key AS is_descending_key
,c.is_primary_key
,c.is_unique_constraint
FROM ['+@name+'].sys.tables AS a
INNER JOIN ['+@name+'].sys.schemas AS b ON a.schema_id = b.schema_id AND a.is_ms_shipped = 0
INNER JOIN ['+@name+'].sys.indexes AS c ON a.object_id = c.object_id
INNER JOIN ['+@name+'].sys.index_columns AS d ON d.object_id = c.object_id AND d.index_id = c.index_id
INNER JOIN ['+@name+'].sys.columns AS e ON e.object_id = d.object_id AND e.column_id = d.column_id
INNER JOIN ['+@name+'].sys.data_spaces AS f ON f.data_space_id = c.data_space_id
)
SELECT '+''''+@name+'''' +' AS DATABASENAME,
Create_Index = CASE WHEN (a.is_primary_key = 1 OR a.is_unique_constraint = 1)
THEN '+''''+ @ALTER +''''+' + a.table_name + '+''''+@CONSTRAINT+''''+' + a.ix_name
+ CASE WHEN a.is_primary_key = 1 THEN '+''''+ @PRIMARY+''''+' ELSE '+''''+@UNIQUE+''''+' END +'+''''+@qx+''''+'+ indexColumns.ix_index_column_name +'+''''+@hx++'''
ELSE '+''''+ @CREATE+''''+' + CASE WHEN a.ix_unique = 1 THEN '+''''+@UNIQUE+''''+' ELSE '+''''+''''+' END
+ a.ix_type_desc + '+''''+@INDEX+''''+' + a.ix_name collate SQL_Latin1_General_CP1_CI_AS + '+''''+@ON+''+'['+@name+'].'+''' + a.schema_name
+ '+''''+@d++''' + a.table_name + '+''''+@qx+''''+' + indexColumns.ix_index_column_name + '+''''+@hx+''''+'
+ CASE WHEN IncludeIndex.ix_included_column_name IS NOT NULL THEN '+''''+@INCLUDE+''''+' + IncludeIndex.ix_included_column_name + '+''''+@hx+''''+' ELSE '+''''+''''+' END +
'+''''+@ON+@qz+''''+'+ a.fg_name + '+''''+@hz+''''+' END
,a.ix_name
,a.table_name
FROM
(
SELECT DISTINCT
ix_unique
,ix_type_desc
,ix_name
,schema_name
,table_name
,fg_name
,is_primary_key
,is_unique_constraint
FROM tx
) AS a
OUTER APPLY
(
SELECT ix_index_column_name
= STUFF((
SELECT '+''''+@dh+''''+' + column_name + CASE WHEN is_descending_key = 1 THEN '+''''+@DESC+''''+' ELSE '+''''+''''+' END
FROM tx AS b
WHERE schema_name = a.schema_name
AND table_name=a.table_name
AND ix_name=a.ix_name
AND ix_type_desc=a.ix_type_desc
AND fg_name=a.fg_name
AND is_included_column=0
ORDER BY index_column_id
FOR XML PATH('+''''+''''+')
),1,1,'+''''+''''+')
)IndexColumns
OUTER APPLY
(
SELECT ix_included_column_name
= STUFF((
SELECT '+''''+@dh+''''+'+ column_name
FROM tx AS b
WHERE schema_name = a.schema_name
AND table_name=a.table_name
AND ix_name=a.ix_name
AND ix_type_desc=a.ix_type_desc
AND fg_name=a.fg_name
AND is_included_column=1
ORDER BY index_column_id
FOR XML PATH('+''''+''''+')
), 1,1,'+''''+''''+')
)IncludeIndex
ORDER BY a.schema_name,a.table_name,a.ix_name;
END'
insert into @tmp
exec sp_executesql @STMT ;


fetch next from cur_data into @name
end;
close cur_data
DEALLOCATE cur_data

select * from @tmp

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章