短网址转换器,seo网络运营,南昌市科协网站,云开发高级布道师使用Sql Server好长时间了#xff0c;今天特别想总结一下#xff0c;算是回顾吧#xff01; 总结#xff1a; 其实很多技巧#xff0c;都是基于SQL Server自带的System Views#xff0c;System Stored Procedures#xff0c;System Functions (常用函数都在在里面)。 常…使用Sql Server好长时间了今天特别想总结一下算是回顾吧 总结 其实很多技巧都是基于SQL Server自带的System ViewsSystem Stored ProceduresSystem Functions (常用函数都在在里面)。 常用函数 1. ISNULL(columnName, ) 先判断该字段是否为空如果为空返回; 否则返回该字段本来的值。 2. DATEDIFF(datepart,startdate,enddate) 不罗嗦直接参考 链接 3. CONVERT函数 直接参考链接 4. LEN 计算长度 5. OBJECT_NAME(object_id) 通过object id得到object name 6. OBJECT_ID(object_name) 通过object name得到 object id 7. CAST 函数 实用语句 1. 有时候项目中定义的储存过程比较多需要确定某一个表被哪些stored procedure使用了可以有如下两种方法 a. SSMS界面上选中要查的表右键点击查找依赖就会显示出来 b. 使用语句 exec sys.sp_depends tableName 例如 exec sys.sp_depends TB_Student 2. 查找 死锁 用到系统表 sys.sysprocesses (其实是一个系统View) 视图中主要的字段 1. SpidSql Servr 会话ID 2. KpidWindows 线程ID 3. Blocked正在阻塞求情的会话 ID。如果此列为 Null则标识请求未被阻塞 4. Waittype当前连接的等待资源编号标示是否等待资源0 或 Null表示不需要等待任何资源 5. Waittime当前等待时间单位为毫秒0 表示没有等待 6. DBID当前正由进程使用的数据库ID 7. UID执行命令的用户ID 8. Login_time客户端进程登录到服务器的时间。 9. Last_batch上次执行存储过程或Execute语句的时间。对于系统进程将存储Sql Server 的启动时间 10.Open_tran进程的打开事务个数。如果有嵌套事务就会大于1 11.Status进程ID 状态dormant 正在重置回话 ; running 回话正在运行一个或多个批处理 ; background 回话正在运行一个后台任务 ; rollback 会话正在处理事务回滚 ; pending 回话正在等待工作现成变为可用 ; runnable 会话中的任务在等待获取 Scheduler 来运行的可执行队列中 ; spinloop 会话中的任务正在等待自旋锁变为可用 ; suspended 会话正在等待事件完成 12.Hostname建立链接的客户端工作站的名称 13.Program_name应用程序的名称就是 连接字符串中配的 Application Name 14.Hostprocess建立连接的应用程序在客户端工作站里的进程ID号 15.Cmd当前正在执行的命令 16.Loginame登录名 例子 a. 检查数据库是否发生阻塞 先查找哪个链接的 blocked 字段不为0。如 SPID10的blocked 字段不为0而是11。SPID 11 的 blocked 为0就可以得出结论此时有阻塞发生10 被 11 阻塞住了。如果你发现一个连接的 blocked 字段的值等于它自己那说明这个连接正在做磁盘读写它要等自己的 I/O 做完。 b. 查找链接在那个数据库上 检查 dbid 即可。得到 dbid可以运行以下查询得到数据库的名字 Select name,dbid from master.sys.sysdatabases3. 查看View或者Stored Procedure的定义语句有时候通过SSMS界面比较慢用语句较快 Select definition, * from sys.sql_modules 使用系统表(严格意义上是个View)sys.sql_modules 4. 在Stored Procedure中查找关键字 之前用下面的语句但是发现这条语句有问题因为这里的ROUTINE_DEFINITION只取到procedure内容的前4000个字符导致查的结果不正确。 SELECT ROUTINE_NAME, ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE %keyWord%
AND ROUTINE_TYPE PROCEDURE用下面的语句就可以查到 SELECT OBJECT_NAME(object_id), OBJECT_DEFINITION(object_id)
FROM SYS.PROCEDURES
WHERE OBJECT_DEFINITION(object_id) LIKE %keyWord%看完上面的第3条其实使用sys.sql_modules 也是可以用来查找关键字。 5. 在数据库中我们会经常看到一些表中只有一个id做为主键那我们怎么快速确认它是否是自增的呢 使用下面的语句查询objectId和columnName根据实际情况填写。如果id_identity的值为1它就是自增的否则就不是自增的。 select id_identity, * from sys.columns where object_id objectId and name columnName一般在建表语句中定义自增使用的是 identity(1, 1) 表示自增从1开始递增量为1。 CREATE TABLE T_test
(ID int IDENTITY(1,1),
Name varchar(50)
) 判段一个表是否具有标识列 可以使用 OBJECTPROPERTY 函数确定一个表是否具有 IDENTITY标识列,用法: Select OBJECTPROPERTY(OBJECT_ID(表名),TableHasIdentity) 如果有则返回1,否则返回0 判断某列是否是标识列 可使用 COLUMNPROPERTY 函数确定 某列是否具有IDENTITY 属性,用法 SELECT COLUMNPROPERTY( OBJECT_ID(表名),列名,IsIdentity) 如果该列为标识列则返回1,否则返回0 查询某表标识列的列名 SQL Server中没有现成的函数实现此功能实现的SQL语句如下 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns
WHERE TABLE_NAME表名 AND COLUMNPROPERTY(
OBJECT_ID(表名),COLUMN_NAME,IsIdentity)1转载于:https://www.cnblogs.com/FocusIN/p/7341380.html