数据库分析实用脚本

--**************************************
-- 数据库分析实用脚本
--**************************************
--1 查询数据库ID                                                                                                       
select db_id('soft')
--插入默认GUID
ALTER TABLE [dbo].[DD_BandTotalProportion] ADD  CONSTRAINT [DF_DD_BandTotalProportion_Id]  DEFAULT (NEWID()) FOR [Id]
--2 查询 连接数据库的进程ID select Hostname,spid,* from master.dbo.sysprocesses where dbid in (select dbid from master.dbo.sysdatabases where name='soft2') and Hostname like 'PC201710101756%' --3 查询数据库所有表记录 SELECT a.name, b.rows FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id WHERE (a.type = 'u') AND (b.indid IN (0, 1)) ORDER BY b.rows DESC --4 查询表数据字典完全版 SELECT 表名=case when a.colorder=1 then d.name else '' end, 字段序号=a.colorder, 字段名=a.name, 标识=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then ''else '' end, 主键=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in ( SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid ))) then '' else '' end, 类型=b.name, 占用字节数=a.length, 长度=COLUMNPROPERTY(a.id,a.name,'PRECISION'), 小数位数=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0), 允许空=case when a.isnullable=1 then ''else '' end, 默认值=isnull(e.text,''), 字段说明=isnull(ep.[value],'') FROM syscolumns a left join systypes b on a.xtype=b.xusertype inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties' left join syscomments e on a.cdefault=e.id LEFT JOIN sys.extended_properties AS ep ON ep.major_id = a.id and ep.class =1 and a.colorder=ep.minor_id where d.name='aaClass' --如果只查询指定表,加上此条件 order by a.id,a.colorder -- 5 查询数据字典简化版 SELECT t.[name] AS 表名, c.[name] AS 字段名, cast(ep.[value] as nvarchar(200)) AS [字段说明] FROM sys.tables AS t INNER JOIN sys.columns AS c ON t.object_id = c.object_id LEFT JOIN sys.extended_properties AS ep ON ep.major_id = c.object_id AND ep.minor_id = c.column_id WHERE --ep.class =1 AND t.name='aaClass' --6 查询数据库所有对象的定义 --D:默认值,FN:xx函数,IF:xx函数,TF:xx函数 P:存储过程,TR:触发器 V :视图 select a.name,a.[type],b.[definition] from sys.all_objects a,sys.sql_modules b where a.is_ms_shipped=0 and a.object_id = b.object_id -- and a.[type] in ('P','V','AF','FN') --要查询的对象类型 -- and a.name='对象名' --要查询的对象名称 order by a.[type] asc --1. Name:对象名 --2. Object_id:对象标识号,在数据中是唯一的 --3. Principal_id :架构所有者ID --4. Parent_object_id:此对象所属对象的ID,0 = 不是子对象 --5. Type:对象类型,常用的类型有, AF = 聚合函数 P = SQL 存储过程 V = 视图 TT = 表类型 U = 表(用户定义类型) --6. Type_desc:对象类型的说明 --7. Create_date / Modify_date :创建日期 / 修改日期 --8. is_ms_shipped:是否为 内部 SQL Server 组建所创建的对象,常用来判断 是否是 系统内置或用户自定义 的对象

 

--数据库查询性能监控
DECLARE @t DATETIME
    SELECT @t=GETDATE()
    waitfor delay '00:00:01' --延迟1秒
    SELECT DATEDIFF(ms,@t,GETDATE())
--判断存储过程是否存在
if exists(select 1 from sysobjects where id=object_id('PROC_GetQty_FromTBusRetail') and xtype='P')   
DROP PROCEDURE PROC_GetQty_FromTBusRetail

 --如果是实表可以用
if exists (select * from sysobjects where id = object_id(N'[dbo].[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) 
drop table [dbo].[表名]

--如果是临时表可以用(说明,如果用查找实表方法来打临时表会找不到.发布区别对代.)
if object_id('tempdb..##temp') is not null
   drop table ##temp

 

数据库锁:帮助脚本

--
锁表(其它事务不能读、更新、删除) BEGIN TRAN SELECT * FROM <表名> WITH(TABLOCKX); WAITFOR delay '00:00:20' COMMIT TRAN --锁表(其它事务只能读,不能更新、删除) BEGIN TRAN SELECT * FROM <表名> WITH(HOLDLOCK); WAITFOR delay '00:00:20' COMMIT TRAN --锁部分行 BEGIN TRAN SELECT * FROM <表名> WITH(XLOCK) WHERE ID IN ('81A2EDF9-D1FD-4037-A17B-1369FD3B169B'); WAITFOR delay '00:01:20' COMMIT TRAN --查看被锁表 select request_session_id 锁表进程,OBJECT_NAME(resource_associated_entity_id) 被锁表名 from sys.dm_tran_locks where resource_type='OBJECT'; --解锁 declare @spid int Set @spid = 55 --锁表进程 declare @sql varchar(1000) set @sql='kill '+cast(@spid as varchar) exec(@sql)

 

posted on 2017-10-27 11:54  邹敏向日葵  阅读(398)  评论(1编辑  收藏  举报

导航