Sql Server常用函数及技巧
使用Sql Server好长时间了,今天特别想总结一下,算是回顾吧!
总结: 其实很多技巧,都是基于SQL Server自带的System Views,System Stored Procedures,System 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. Spid:Sql Servr 会话ID 2. Kpid:Windows 线程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.sysdatabases
3. 查看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
Sql Server常用函数及技巧的更多相关文章
- SQL Server 常用函数使用方法
之前就想要把一些 SQL 的常用函数记录下来, 直到今天用到substring()这个函数,C# 里面这个方法起始值是 0,而 SQL 里面起始值是 1.傻傻分不清楚... 这篇博客作为记录 SQL ...
- Oracle 与Sql Server常用函数对比
来自:http://topic.csdn.net/u/20080704/08/b2b8c42f-b0d6-4cda-98b1-6e4a279b4ff8.html 感谢楼主 函数 SQLServer和O ...
- SQL Server 常用函数总结
SQL去空格函数 1.ltrim(‘内容’)--去掉字符左边的空格 代码如下 declare @str varchar(100) set @str=' ADFADF' select @str sele ...
- SQL Server 常用函数使用方法(持续更新)
之前就想要把一些 SQL 的常用函数记录下来,不过一直没有实行...嘿嘿... 直到今天用到substring()这个函数,C# 里面这个方法起始值是 0,而 SQL 里面起始值是 1.傻傻分不清楚. ...
- sql server常用函数、常用语句
一.常用函数 1.字符串函数 : charindex(':','abc:123') --寻找一个字符在一段字符串中起始的位置 len('zhangsan') --获取一段字符串的长度 lef ...
- SQL Server 常用函数
1.DATEADD 在向指定日期加上一段时间的基础上,返回新的 datetime 值. 语法 DATEADD ( datepart , number, date ) 参数 datepart 是规定应向 ...
- SQL Server常用函数使用方法(学习)
1.转载至 https://www.cnblogs.com/Brambling/p/6779434.html Substring()函数,用于截取字符串方法,三个参数 参数1:用于指定要操作的字符串 ...
- SQL Server常用函数汇总
1.day(date) 用途:获取日期是所在月的几号 参数:date是一个可以解析为 time.date.smalldatetime.datetime.datetime2 或 datetime ...
- SQL Server 常用函数介绍
--聚合函数 count( * | 字段名) --统计数据表中的数据总数sum( 表达式 | 字段名) --计算表达式或字段名中数据的和,表达式或字段名的数据类型要求是数值型avg( 表达式 | 字段 ...
随机推荐
- tomcat 6.0 安装及配置
前提:安装并配置好jdk 1.免安装版存放目录:D:\01Install\tomcat
- certbot申请SSL证书及中间证书问题
首先是到https://certbot.eff.org/上申请证书,由于我们使用的web服务器是基于erlang的cowboy的,在主页上没有选项可以支持,因此在Software下拉项中选择" ...
- tensorboard 用法
step1: 代码中把summary写到文件中 step2: dos窗口执行tensorboard命令 切换到代码所在目录下,输入: tensorboard --logdir=./tmp/graph ...
- 集训Day5
生活还得继续 bzoj3771 题面让我笑了很长时间 给出 n个物品,价值为别为Xi且各不相同,现在可以取1个.2个或3个,问每种价值和有几种情况? *顺序不同算一种 很傻逼的一个母函数+容斥,用A( ...
- ACM学习历程—Codeforces 446C DZY Loves Fibonacci Numbers(线段树 && 数论)
Description In mathematical terms, the sequence Fn of Fibonacci numbers is defined by the recurrence ...
- POJ3352(连通分量缩点)
Road Construction Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10352 Accepted: 514 ...
- .NETFramework:Random
ylbtech-.NETFramework:Random 1.程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c ...
- java 基础知识学习 内存泄露(memory leak) VS 内存溢出(out of memory)以及内存管理
内存泄露(memory leak) VS 内存溢出(out of memory) 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory ...
- complexType
//decltype的表达式如果是加上括号的变量,结果将是引用 decltype((variable)) ruiy; //此变量的数据类型是引用(但此处变量的申明语句是错误的,引用不是对象,指向的对象 ...
- linux命令:gzip命令
减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间.gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用.gzip不仅可以用 ...