SqlServer小语法 持续更新

1.查询死锁

WITH    CTE_SID ( BSID, SID, sql_handle )
          AS ( SELECT   blocking_session_id ,
                        session_id ,
                        sql_handle
               FROM     sys.dm_exec_requests
               WHERE    blocking_session_id <> 0
               UNION ALL
               SELECT   A.blocking_session_id ,
                        A.session_id ,
                        A.sql_handle
               FROM     sys.dm_exec_requests A
                        JOIN CTE_SID B ON A.SESSION_ID = B.BSID
             )
    SELECT  C.BSID ,
            C.SID ,
            S.login_name ,
            S.host_name ,
            S.status ,
            S.cpu_time ,
            S.memory_usage ,
            S.last_request_start_time ,
            S.last_request_end_time ,
            S.logical_reads ,
            S.row_count ,
            q.text
    FROM    CTE_SID C 
            JOIN sys.dm_exec_sessions S ON C.sid = s.session_id
            CROSS APPLY sys.dm_exec_sql_text(C.sql_handle) Q
    ORDER BY sid

2.干掉死锁

declare @spid int
Set @spid = 60 --锁表进程  --bsid
declare @sql varchar(1000)
set @sql='kill '+cast(@spid as varchar)
exec(@sql)

3.月数据按天统计

declare @sql NVARCHAR(4000)
	 
	set @sql = 'select SrcDepart';--需要查询什么字段在这里拼装
	 
	while @starttime < @endtime
	begin
	  set @starttime = @starttime+1
	  --'''表示输出一个单引号
	  --'''+Convert(Varchar(10),@starttime,120)+'''表示 将变量@starttime转换为字符串 '2012-05-05'
	  set @sql = @sql +',(select 数量 from 表名 M where M.SrcDepart=N.SrcDepart and M.InDate='''+Convert(Varchar(10),@starttime,120)+''') as '''+Convert(Varchar(10),@starttime,120)+''''
	end
	 
	set @sql = @sql+' from VCaseTranIn N where 1=1';
	exec(@sql) --执行SQL
	 
	--print @sql --打印SQL

4.创建视图时,如何加group by

select TOP 100 PERCENT xx from TableName order by XX --PERCENT 代表百分之多少
--TOP 100 前一百条数据
--TOP 100 PERCENT  百分之百数据
--创建视图时,只要语句中包含top关键词,就可以使用group by

5.sqlserver用语句给表注释

EXECUTE sp_addextendedproperty N'MS_Description', N'表注释', N'user', N'dbo', N'table', N'表名', NULL, NULL

6.sqlserver用语句给表的“字段”注释

EXECUTE sp_addextendedproperty N'MS_Description', N'字段注释', N'user', N'dbo', N'table', N'表名', N'column', N'字段名'

7.查看sqlserver注释

SELECT
A.name AS table_name,
B.name AS column_name,
C.value AS column_description
FROM sys.tables A
INNER JOIN sys.columns B ON B.object_id = A.object_id
LEFT JOIN sys.extended_properties C ON C.major_id = B.object_id AND C.minor_id = B.column_id
WHERE A.name = '表名'

8.查询某张表被哪些存储过程或者视图用到的sql语句

select distinct object_name(id) from syscomments 
where id in (select id from sysobjects where type  in('V','P')) --V表示视图,P表示存储过程
and text like '%tablename%'--tablename为需要查询被引用的表名称

9.sql server 查询某个表的所有触发器名称

select   *   from   sysobjects   where   xtype='TR'   
select   *   from   sysobjects   where   xtype='TR'   and   parent_obj=object_id('表名')

select name 表格名称 from sysobjects where xtype='U'  AND id in(select parent_obj from sysobjects where xtype='TR')------查询有触发器的表

select name 表格名称 from sysobjects where xtype='U'  AND id NOT in(select parent_obj from sysobjects where xtype='TR')------查询没有触发器的表

/*xtype   char(2)   对象类型。可以是下列对象类型中的一种:     
  C   =   CHECK   约束   
  D   =   默认值或   DEFAULT   约束   
  F   =   FOREIGN   KEY   约束   
  L   =   日志   
  FN   =   标量函数   
  IF   =   内嵌表函数   
  P   =   存储过程   
  PK   =   PRIMARY   KEY   约束(类型是   K)   
  RF   =   复制筛选存储过程   
  S   =   系统表   
  TF   =   表函数   
  TR   =   触发器   
  U   =   用户表   
  UQ   =   UNIQUE   约束(类型是   K)   
  V   =   视图   
  X   =   扩展存储过程  */

猜你喜欢

转载自blog.csdn.net/weixin_45963929/article/details/124410525
今日推荐