--**************************************
-- 数据库分析实用脚本
--**************************************
--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)
转载于:https://www.cnblogs.com/zoumin123/p/7742492.html