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 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
)
SELECT
Drop_Index = CASE WHEN (a.is_primary_key = 1 OR a.is_unique_constraint = 1)
THEN ‘ALTER TABLE ‘ + a.table_name + ‘ DROP CONSTRAINT ‘ + a.ix_name
ELSE ‘DROP INDEX ‘ + a.ix_name collate SQL_Latin1_General_CP1_CI_AS + ‘ ON ‘ + a.schema_name + ‘.‘ + a.table_name END
,Create_Index = CASE WHEN (a.is_primary_key = 1 OR a.is_unique_constraint = 1)
THEN ‘ALTER TABLE ‘ + a.table_name + ‘ ADD CONSTRAINT ‘ + a.ix_name
+ CASE WHEN a.is_primary_key = 1 THEN ‘ PRIMARY KEY‘ ELSE ‘ UNIQUE‘ END + ‘(‘ + indexColumns.ix_index_column_name + ‘)‘
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 ‘ + a.schema_name
+ ‘.‘ + a.table_name + ‘(‘ + indexColumns.ix_index_column_name + ‘)‘
+ CASE WHEN IncludeIndex.ix_included_column_name IS NOT NULL THEN ‘ INCLUDE (‘ + IncludeIndex.ix_included_column_name + ‘)‘ ELSE ‘‘ END
+ ‘ ON [‘ + a.fg_name +‘]‘ END
,CASE WHEN a.ix_unique = 1 THEN ‘UNIQUE‘ END AS ix_unique
,a.ix_type_desc
,a.ix_name
,a.schema_name
,a.table_name
,indexColumns.ix_index_column_name
,IncludeIndex.ix_included_column_name
,a.fg_name
,a.is_primary_key
,a.is_unique_constraint
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 ‘,‘ + 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 ‘,‘ + 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
SQL SERVER 2005 获取表的所有索引信息以及删除和新建语句
时间: 2024-11-08 21:21:26
SQL SERVER 2005 获取表的所有索引信息以及删除和新建语句的相关文章
SQL Server 2005中的分区表(四):删除(合并)一个分区
在前面我们介绍过如何创建和使用一个分区表,并举了一个例子,将不 同年份的数据放在不同的物理分区表里.具体的分区方式为: 第1个小表:2010-1-1以前的数据(不包含2010-1-1). 第2个小表:2010-1-1(包含2010-1-1)到2010-12-31之间的数据. 第3个小表:2011-1-1(包含2011-1-1)到2011-12-31之间的数据. 第4个小表:2012-1-1(包含2012-1-1)到2012-12-31之间的数据. 第5个小表:2013-1-1(包含2013-1-
SQL Server 2005中的分区表(四):删除(合并)一个分区(转)
在前面我们介绍过如何创建和使用一个分区表,并举了一个例子,将不 同年份的数据放在不同的物理分区表里.具体的分区方式为: 第1个小表:2010-1-1以前的数据(不包含2010-1-1). 第2个小表:2010-1-1(包含2010-1-1)到2010-12-31之间的数据. 第3个小表:2011-1-1(包含2011-1-1)到2011-12-31之间的数据. 第4个小表:2012-1-1(包含2012-1-1)到2012-12-31之间的数据. 第5个小表:2013-1-1(包含2013-1-
SQL SERVER中获取表间主外键关系
sql server 2008中的主外键关系获取方式: 转自:http://www.cnblogs.com/ke10/archive/2012/06/11/2544655.html SELECT OBJECT_NAME(con.constid) '关系名' ,OBJECT_NAME(sf.fkeyid) '主键表' ,fcol.name '主键' ,OBJECT_NAME(sf.rkeyid) '外键表' ,rcol.name '外键',st.name'数据类型'FROM sysforeignk
sql server 2008获取表的字段注释
1 SELECT 2 表名=case when a.colorder=1 then d.name else '' end, 3 表说明=case when a.colorder=1 then isnull(f.value,'') else '' end, 4 字段序号=a.colorder, 5 字段名=a.name, 6 标识=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end, 7 主键=case
SQL Server 查看一个表上的索引
方法:1 sys.indexes index_id =0:堆 index_id =1:聚集索引 index_id =2.....:非聚集索引 ------------------------------------------------------------------------------------- 例子: create table Student(ID int not null,Name nvarchar(16),Major nvarchar(16));go create inde
SQL Server 2005中的分区表(六):将已分区表转换成普通表
在前面,我们介绍过怎么样直接创建一个分区表,也介绍过怎么将一个普通表转换成一个分区表.那么,这两种方式创建的表有什么区别呢?现在,我又最新地创建了两个表: 第一个表名为Sale,这个表使用的是<SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?>中的方法创建的,在创建完之后,还为该表添加了一个主键. 第二个表名Sale1,这个表使用的是<SQL Server 2005中的分区表(三):将普通表转换成分区表>中的方法创建的,也就是先创建了
SQL Server 2005中的分区表
记录笔记: 转自 猪八戒学做网站 SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表? SQL Server 2005中的分区表(二):如何添加.查询.修改分区表中的数据 SQL Server 2005中的分区表(三):将普通表转换成分区表 SQL Server 2005中的分区表(四):删除(合并)一个分区 SQL Server 2005中的分区表(五):添加一个分区 SQL Server 2005中的分区表(六):将已分区表转换成普通表 SQL S
删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005,
原文:删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005, --删除指定表中所有索引 --用法:declare @tableName varchar(100) --set @tableName='表名' --表名 ,根据实际情况替换 --exec sp_dropindex @tableName if exists(select 1 from sysobjects where id = object_id('dropindex') and xtype =
SQL Server 2005中的分区表(三):将普通表转换成分区表(转)
在设计数据库时,经常没有考虑到表分区的问题,往往在数据表承重的负担越来越重时,才会考虑到分区方式,这时,就涉及到如何将普通表转换成分区表的问题了. 那么,如何将一个普通表转换成一个分区表 呢?说到底,只要将该表创建一个聚集索引,并在聚集索引上使用分区方案即可. 不过,这回说起来简单,做起来就复杂了一点.还是接着上面的例子,我们先使用以下SQL语句将原有的Sale表删除. --删除原来的数据表 drop table Sale 然后使用以下SQL语句创建一个新的普通表,并在这个表里插入一些数据. -