加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver2008命令管理工具

发布时间:2020-12-12 13:59:35 所属栏目:MsSql教程 来源:网络整理
导读:查询没有主键的数据库表 select b.name from sysobjects b where xtype='U' and b.name not in ( select object_name(a.parent_obj) from sysobjects a where xtype='PK' ) 查看数据库所有表的主键索引 SELECT A.name 表名,B.name 索引名,D.index_column_id

查询没有主键的数据库表

select b.name 
from sysobjects b 
where xtype='U' and  b.name not in   
     
(
     select object_name(a.parent_obj)  
     from sysobjects a 
     where xtype='PK' 
)

查看数据库所有表的主键索引

SELECT  
	A.name 表名,B.name 索引名,D.index_column_id 列的序号,E.name 列名,F.name 列的类型,F.max_length 列的最大长度,F.precision 列的精度,F.scale 列的小数位数
FROM SYS.OBJECTS A
JOIN SYS.OBJECTS B ON B.parent_object_id = A.OBJECT_Id
JOIN SYS.INDEXES C ON C.OBJECT_Id = B.parent_object_id AND C.name = B.name
JOIN SYS.INDEX_COLUMNS D ON D.OBJECT_Id = C.OBJECT_Id AND D.index_id = C.index_id
JOIN SYS.COLUMNS E ON E.OBJECT_Id = A.OBJECT_Id AND E.column_id = D.column_id 
JOIN SYS.TYPES F ON E.user_type_id=F.user_type_id
ORDER BY A.name ASC 


查询数据库所有索引

SELECT 
	O.[object_id] TableId,O.Name TableName,ISNULL(KC.[object_id],IDX.index_id) IndexId,IDX.Name IndexName,ISNULL(KC.type_desc,'Index') IndexType,IDXC.index_column_id Index_Column_id,C.Column_id ColumnID,C.Name ColumnName,CASE INDEXKEY_PROPERTY(IDXC.[object_id],IDXC.index_id,IDXC.index_column_id,'IsDescending')
	WHEN 1 THEN 'DESC' 
	WHEN 0 THEN 'ASC' ELSE '' 
	END Sort,CASE 
	WHEN IDX.is_primary_key=1 THEN N'√'
	ELSE N'' END PrimaryKey,CASE WHEN IDX.is_unique=1 THEN N'√'ELSE N'' END [UQIQUE],CASE WHEN IDX.ignore_dup_key=1 THEN N'√'ELSE N'' END Ignore_dup_key,CASE WHEN IDX.is_disabled=1 THEN N'√'ELSE N'' END Disabled,IDX.fill_factor Fill_factor,CASE WHEN IDX.is_padded=1 THEN N'√'ELSE N'' END Padded
FROM sys.indexes IDX
INNER JOIN sys.index_columns IDXC ON IDX.[object_id]=IDXC.[object_id] AND IDX.index_id=IDXC.index_id
LEFT JOIN sys.key_constraints KC ON IDX.[object_id]=KC.[parent_object_id] AND IDX.index_id=KC.unique_index_id
INNER JOIN sys.objects O ON O.[object_id]=IDX.[object_id]
INNER JOIN sys.columns C ON O.[object_id]=C.[object_id] AND O.type='U' AND O.is_ms_shipped=0 AND IDXC.Column_id=C.Column_id
--    INNER JOIN  -- 对于一个列包含多个索引的情况,只显示第1个索引信息
--    (
--        SELECT [object_id],Column_id,index_id=MIN(index_id)
--        FROM sys.index_columns
--        GROUP BY [object_id],Column_id
--    ) IDXCUQ
--        ON IDXC.[object_id]=IDXCUQ.[object_id]
--            AND IDXC.Column_id=IDXCUQ.Column_id
WHERE ISNULL(KC.type_desc,'Index')  <> 'PRIMARY_KEY_CONSTRAINT'
ORDER BY o.name ASC,IDX.Name ASC

查询所有索引

select indexs.Tab_Name as [表名],indexs.Index_Name as [索引名],indexs.[Co_Names] as [索引列],Ind_Attribute.is_primary_key as [是否主键],Ind_Attribute.is_unique AS [是否唯一键],Ind_Attribute.is_disabled AS [是否禁用]
from 
(
    select Tab_Name,Index_Name,[Co_Names]=stuff((select ','+[Co_Name] 
    from
    ( 
        select tab.Name as Tab_Name,ind.Name as Index_Name,Col.Name as Co_Name 
        from sys.indexes ind
        inner join sys.tables tab on ind.Object_id = tab.object_id and ind.type in (1,2)
        inner join sys.index_columns index_columns on tab.object_id = index_columns.object_id and ind.index_id = index_columns.index_id
        inner join sys.columns Col on tab.object_id = Col.object_id and index_columns.column_id = Col.column_id
    ) t 
    where Tab_Name=tb.Tab_Name and Index_Name=tb.Index_Name 
    for xml path('')),1,'')
    from 
    (
        select tab.Name as Tab_Name,2)
        inner join sys.index_columns index_columns on tab.object_id = index_columns.object_id and ind.index_id = index_columns.index_id
        inner join sys.columns Col on tab.object_id = Col.object_id and index_columns.column_id = Col.column_id
    )tb
    where Tab_Name not like 'sys%'
    group by Tab_Name,Index_Name
) indexs 
inner join sys.indexes Ind_Attribute on indexs.Index_Name = Ind_Attribute.name
order by indexs.Tab_Name


select indexs.Tab_Name as [表名],Index_Name
) indexs 
inner join sys.indexes Ind_Attribute on indexs.Index_Name = Ind_Attribute.name
order by indexs.Tab_Name



数据库所有索引信息列表查询

SELECT 
	CASE WHEN C.column_id=1 THEN O.name ELSE N'' END TableName,ISNULL(CASE WHEN C.column_id=1 THEN PTB.[value] END,N'') TableDesc,C.column_id Column_id,C.name ColumnName,ISNULL(IDX.PrimaryKey,N'') PrimaryKey,CASE WHEN C.is_identity=1 THEN N'√'ELSE N'' END [IDENTITY],CASE WHEN C.is_computed=1 THEN N'√'ELSE N'' END Computed,T.name Type,C.max_length Length,C.precision,C.scale,CASE WHEN C.is_nullable=1 THEN N'√'ELSE N'' END NullAble,ISNULL(D.definition,N'') [Default],ISNULL(PFD.[value],N'') ColumnDesc,ISNULL(IDX.IndexName,N'') IndexName,ISNULL(IDX.Sort,N'') IndexSort,O.CreatCreate_Datee_Date,O.Modify_date Modify_Date
FROM sys.columns C
INNER JOIN sys.objects O ON C.[object_id]=O.[object_id]AND O.type='U' AND O.is_ms_shipped=0
INNER JOIN sys.types T ON C.user_type_id=T.user_type_id
LEFT JOIN sys.default_constraints D ON C.[object_id]=D.parent_object_id AND C.column_id=D.parent_column_id AND C.default_object_id=D.[object_id]
LEFT JOIN sys.extended_properties PFD ON PFD.class=1  AND C.[object_id]=PFD.major_id  AND C.column_id=PFD.minor_id
--AND PFD.name='Caption'  -- 字段说明对应的描述名称(一个字段可以添加多个不同name的描述)
LEFT JOIN sys.extended_properties PTB ON PTB.class=1 AND PTB.minor_id=0  AND C.[object_id]=PTB.major_id
--AND PFD.name='Caption'  -- 表说明对应的描述名称(一个表可以添加多个不同name的描述) 

LEFT JOIN                       -- 索引及主键信息
(
	SELECT IDXC.[object_id],IDXC.column_id,'IsDescending')WHEN 1 THEN 'DESC' WHEN 0 THEN 'ASC' ELSE '' END Sort,CASE WHEN IDX.is_primary_key=1 THEN N'√'ELSE N'' END PrimaryKey,IDX.Name IndexName
	FROM sys.indexes IDX
	INNER JOIN sys.index_columns IDXC ON IDX.[object_id]=IDXC.[object_id] AND IDX.index_id=IDXC.index_id
	LEFT JOIN sys.key_constraints KC ON IDX.[object_id]=KC.[parent_object_id] AND IDX.index_id=KC.unique_index_id
	INNER JOIN  -- 对于一个列包含多个索引的情况,只显示第1个索引信息
	(
		SELECT [object_id],index_id=MIN(index_id)
		FROM sys.index_columns
		GROUP BY [object_id],Column_id
	) IDXCUQ
	ON IDXC.[object_id]=IDXCUQ.[object_id]
	AND IDXC.Column_id=IDXCUQ.Column_id
	AND IDXC.index_id=IDXCUQ.index_id
) IDX
ON C.[object_id]=IDX.[object_id] AND C.column_id=IDX.column_id
-- WHERE O.name=N'要查询的表'       -- 如果只查询指定表,加上此条件
ORDER BY O.name,C.column_id 



tempdb 数据或日志文件的大小和文件增长参数:

SELECT
    name AS FileName,size*1.0/128 AS FileSizeinMB,CASE max_size
        WHEN 0 THEN 'Autogrowth is off.'
        WHEN -1 THEN 'Autogrowth is on.'
        ELSE 'Log file will grow to a maximum size of 2 TB.'
    END,growth AS 'GrowthValue','GrowthIncrement' =
        CASE
            WHEN growth = 0 THEN 'Size is fixed and will not grow.'
            WHEN growth > 0 AND is_percent_growth = 0
                THEN 'Growth value is in 8-KB pages.'
            ELSE 'Growth value is a percentage.'
        END
FROM tempdb.sys.database_files;
GO


查询所有存储过程
select Pr_Name as [存储过程],[参数]=stuff(
(
	select ','+[Parameter]
	from 
	(
		select Pr.Name as Pr_Name,parameter.name +' ' +Type.Name + ' ('+convert(varchar(32),parameter.max_length)+')' as Parameter
		from sys.procedures Pr 
		left join sys.parameters parameter on Pr.object_id = parameter.object_id
		inner join sys.types Type on parameter.system_type_id = Type.system_type_id
		where type = 'P'
	) t 
	where Pr_Name=tb.Pr_Name 
	for xml path('')),''
)
from 
(
	select Pr.Name as Pr_Name,parameter.max_length)+')' as Parameter
	from sys.procedures Pr 
	left join sys.parameters parameter on Pr.object_id = parameter.object_id
	inner join sys.types Type on parameter.system_type_id = Type.system_type_id
	where type = 'P'
)tb
where Pr_Name not like 'sp_%' --and Pr_Name not like 'dt%'
group by Pr_Name
order by Pr_Name

查询所有的存储过程
select Pr_Name as [存储过程],parameter.max_length)+')' as Parameter
	from sys.procedures Pr 
	left join sys.parameters parameter on Pr.object_id = parameter.object_id
	inner join sys.types Type on parameter.system_type_id = Type.system_type_id
	where type = 'P'
)tb
where Pr_Name not like 'sp_%' --and Pr_Name not like 'dt%'
group by Pr_Name
order by Pr_Name

存储过程信息查询

select Pr.Name as Pr_Name,parameter.name,T.Name,convert(varchar(32),parameter.max_length) as 参数长度,parameter.is_output as 是否是输出参数,parameter.*
from sys.procedures Pr 
left join sys.parameters parameter on Pr.object_id = parameter.object_id
inner join sys.types T on parameter.system_type_id = T.system_type_id
where Pr.type = 'P' and Pr.Name like 'order_%' and T.name!='sysname' 
order by Pr.Name

显示存储过程内容

SELECT TEXT 
FROM syscomments 
WHERE id=object_id('SP_NAME')

SP_HELPTEXT 'SP_NAME'

查询所有触发器

select triggers.name as [触发器],tables.name as [表名],triggers.is_disabled as [是否禁用],triggers.is_instead_of_trigger AS [触发器类型],?? ??? case when triggers.is_instead_of_trigger = 1 then 'INSTEAD OF'when triggers.is_instead_of_trigger = 0 then 'AFTER' else null end as [触发器类型描述]
from sys.triggers triggers
inner join sys.tables tables on triggers.parent_id = tables.object_id
where triggers.type ='TR'
order by triggers.create_date



?批量删除视图
DECLARE @tb     VARCHAR(1000),@a      INT,@b      INT,@sql    VARCHAR(8000)
        
--第一步,读取所有视图
SELECT IDENTITY(INT,1) flag,[name] names
INTO #tmp
FROM sysobjects
WHERE xtype='v'
--第二步循环删除

SELECT @a=MIN(flag),@b=MAX(flag)
FROM #tmp

WHILE @a <= @b
    BEGIN
        SELECT @tb=names
        FROM #tmp
        WHERE flag=@a
        
        SET @sql='drop view dbo.'+ @tb
        EXEC(@sql)
        
        SET @a += 1
    END 
检查需要重建索引的表
SELECT OBJECT_NAME(dt.object_id),si.name,dt.avg_fragmentation_in_percent,dt.avg_page_space_used_in_percent
FROM
    (SELECT object_id,index_id,avg_fragmentation_in_percent,avg_page_space_used_in_percent
        FROM    sys.dm_db_index_physical_stats(DB_ID(),NULL,'DETAILED')
        WHERE   index_id <> 0
    ) AS dt --does not return information about heaps
        INNER JOIN sys.indexes si
            ON    si.object_id = dt.object_id
            AND si.index_id  = dt.index_id


生成维护索引语句

SELECT 'ALTER INDEX [' + ix.name + '] ON [' + s.name + '].[' + t.name + '] ' + 
?? ?CASE WHEN ps.avg_fragmentation_in_percent > 15 
?? ?THEN 'REBUILD' 
?? ?ELSE 'REORGANIZE' 
?? ?END + 
?? ?CASE WHEN pc.partition_count > 1 
?? ?THEN ' PARTITION = ' + CAST(ps.partition_number AS nvarchar(MAX)) 
?? ?ELSE '' 
?? ?END,avg_fragmentation_in_percent 
FROM sys.indexes AS ix 
INNER JOIN sys.tables t ON t.object_id = ix.object_id 
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id 
INNER JOIN 
(
?? ?SELECT object_id,partition_number 
?? ?FROM sys.dm_db_index_physical_stats (DB_ID(),NULL) 
) ps ON t.object_id = ps.object_id AND ix.index_id = ps.index_id 
INNER JOIN 
(
?? ?SELECT object_id,COUNT(DISTINCT partition_number) AS partition_count 
?? ?FROM sys.partitions 
?? ?GROUP BY object_id,index_id 
) pc ON t.object_id = pc.object_id AND ix.index_id = pc.index_id 
WHERE ps.avg_fragmentation_in_percent > 10 AND ix.name IS NOT NULL 


--对数据库所有表重新生成索引语句

DECLARE @TableName VARCHAR(255)
DECLARE TableCursor CURSOR FOR
SELECT table_name 
FROM information_schema.tables
WHERE table_type = 'base table'

OPEN TableCursor

FETCH NEXT 
FROM TableCursor 
INTO @TableName

WHILE @@FETCH_STATUS = 0
	BEGIN
		DBCC DBREINDEX(@TableName,' ',90)
		
		FETCH NEXT 
		FROM TableCursor 
		INTO @TableName
	END
CLOSE TableCursor
DEALLOCATE TableCursor


查询占用cpu资源的情况

select lastwaittype,spid,blocked,cpu,hostname,program_name     
from master.dbo.sysprocesses
order by cpu desc

统计出SQL Server所有的监控对象和计数器情况。

SELECT object_name,COUNT(DISTINCT counter_name)
FROM sys.dm_os_performance_counters
GROUP BY object_name
ORDER BY object_name

查询CPU占用情况

SELECT TOP 50
total_worker_time/execution_count AS '每次执行占用CPU(微秒)',execution_count?????? as '执行次数',total_worker_time???? as '总共占用CPU(微秒)',creation_time???????? as '创建时间',last_execution_time?? as '最后执行时间',min_worker_time?????? as '最低每次占用CPU',max_worker_time?????? as '最高每次占用cpu',total_physical_reads? as '总共io物理读取次数',total_logical_reads?? as '总共逻辑读取次数',total_logical_writes? as '总共逻辑写次数',total_elapsed_time??? as '完成此计划的执行所占用的总时间(微秒)',(
?? ?SELECT SUBSTRING(text,statement_start_offset/2,?? ?(
?? ??? ?CASE WHEN statement_end_offset = -1 
?? ??? ?then LEN(CONVERT(nvarchar(max),text)) * 2 
?? ??? ?ELSE statement_end_offset 
?? ??? ?end -statement_start_offset)/2
?? ?) 
?? ?FROM sys.dm_exec_sql_text(sql_handle)
) AS 'SQL内容'
FROM sys.dm_exec_query_stats
ORDER BY 1 DESC


查询sqlser当前执行的对象

select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName
from sys.dm_tran_locks
where resource_type = 'OBJECT'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读