create
proc p_helpindex
@tbname sysname =
''
,@type
char
(1) =
'1'
as
with
t
as
(
select
rank() over (
order
by
b.
name
,a.
name
,c.
name
)
as
id,c.index_id,
b.
name
as
schema_name,a.
name
as
table_name,c.fill_factor,c.is_padded,
c.
name
as
ix_name,c.type,e.
name
as
column_name,d.index_column_id,c.is_primary_key,
d.is_included_column,f.
name
as
filegroup_name,c.is_unique,c.ignore_dup_key,
d.is_descending_key
as
is_descending_key,c.allow_row_locks,c.allow_page_locks
from
sys.tables
as
a
inner
join
sys.schemas
as
b
on
a.schema_id=b.schema_id
and
a.is_ms_shipped=0
inner
join
sys.indexes
as
c
on
a.object_id=c.object_id
inner
join
sys.index_columns
as
d
on
d.object_id=c.object_id
and
d.index_id=c.index_id
inner
join
sys.columns
as
e
on
e.object_id=d.object_id
and
e.column_id=d.column_id
inner
join
sys.data_spaces
as
f
on
f.data_space_id=c.data_space_id
where
a.object_id
like
'%'
+
isnull
(ltrim(object_id(@tbname)),
''
)+
'%'
and
c.is_hypothetical=0
and
is_disabled=0
and
c.type>=@type
)
select
distinct
a.schema_name,a.table_name,a.ix_name,
case
a.type
when
1
then
'clustered'
when
2
then
'nonclustered'
else
''
end
as
index_type,
case
a.is_primary_key
when
0
then
'no'
else
'yes'
end
as
is_primary_key,
m.ix_index_column_name,
isnull
(m.ix_index_include_column_name,
''
)
as
ix_index_include_column_name,
a.filegroup_name,
replace
(
'create '
+
case
when
is_unique=1
then
'unique '
else
''
end
+
case
when
a.type=1
then
'clustered'
else
'nonclustered'
end
+
' index '
+ a.ix_name+
' on '
+a.schema_name+
'.'
+a.table_name+
'('
+m.ix_index_column_name+
')'
+
case
when
m.ix_index_include_column_name
is
null
then
''
else
'include('
+m.ix_index_include_column_name+
')'
end
+
case
when
fill_factor>0
or
ignore_dup_key=1
or
is_padded=1
or
allow_row_locks=0
or
allow_page_locks=0
then
'with('
else
''
end
+
case
when
fill_factor>0
then
',fillfactor='
+rtrim(fill_factor)
else
''
end
+
case
when
is_padded=1
then
',pad_index=on'
else
''
end
+
case
when
ignore_dup_key=1
then
',ignore_dup_key=on'
else
''
end
+
case
when
allow_row_locks=0
then
',allow_row_locks=off'
else
''
end
+
case
when
allow_page_locks=0
then
',allow_page_locks=off'
else
''
end
+
case
when
fill_factor>0
or
ignore_dup_key=1
or
is_padded=1
or
allow_row_locks=0
or
allow_page_locks=0
then
')'
else
''
end
,
'with(,'
,
'with('
)
as
sqlscript
from
t
as
a
outer
apply
(
select
ix_index_column_name= stuff(
replace
(
replace
(
(
select
case
when
b.is_descending_key =1
then
column_name +
' desc'
else
column_name
end
as
column_name
from
t
as
b
where
a.id=b.id
and
is_included_column=0
order
by
index_column_id
for
xml auto
),
'<b column_name="'
,
','
),
'"/>'
,
''
), 1, 1,
''
)
,ix_index_include_column_name= stuff(
replace
(
replace
(
(
select
column_name
from
t
as
b
where
a.id=b.id
and
is_included_column=1
order
by
index_column_id
for
xml auto
),
'<e column_name="'
,
','
),
'"/>'
,
''
), 1, 1,
''
)
)m
order
by
a.schema_name,a.table_name,a.ix_name
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器