--**************************************
-- 資料庫分析實用腳本
--**************************************
--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