Sql Server常用函数及技巧

使用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. 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

  

转载于:https://www.cnblogs.com/FocusIN/p/7341380.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十分钟让你明白AIDL

前言我在[003]AIDL是什么中介绍的AIDL&#xff0c;但是好像还有朋友不明白问我&#xff0c;那我就来写一个终极版的文章&#xff0c;让你十分钟彻底明白AIDL&#xff0c;以下代码全为手写。目标Server进程注册一个Binder服务到SM&#xff0c;该Binder服务提供两个接口&#xff…

表达式

表达式与分支 语句 分割文档main spilit 风格pep8 赋值 序列赋值 列表切割法 扩展序列解包赋值 *获取剩余 多目标赋值 数字256为界以内指向同对象 以外就不同 字符串3个 列表属于引用类型 不要共同引用两种方法 参数化赋值 列表也可以进行参数化赋值 表达式 函数 方法…

Linux下故障分析方法

1、背景有时候会遇到一些疑难杂症&#xff0c;并且监控插件并不能一眼立马发现问题的根源。这时候就需要登录服务器进一步深入分析问题的根源。那么分析问题需要有一定的技术经验积累&#xff0c;并且有些问题涉及到的领域非常广&#xff0c;才能定位到问题。所以&#xff0c;分…

TEXT宏

TEXT宏是windows程序设计中经常遇到的宏&#xff0c;定义在 <winnt.h>中 TCHAR *P TEXT("this is a const string"); 如果使用UNICODE字符集&#xff0c;则TEXT&#xff08;“....”&#xff09; &#xff0c;相当于 L"....." &#xff1b; 如果使…

作业题

import random fopen(‘data.txt’,‘w’) for i in range(10000): f.write(str(random.randint(1,100))) f.write(’\n’) f.seek(0) print(f.read()) f.close f.seek()函数 移动文件中n个操作 正为向结束方向 enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符…

即将放弃python的app_python放弃之 模块和包

importprint(frrom the my_module.py)money1000def rend1():print(my_my_module->reand1->money,money)def rend2():print(my_module->read2 calling read1)read1()def change():global moneymoney0模块可以包含可执行语句和函数的定义&#xff0c;这些语句的目的是初…

ubuntu 安装gitlab

gitlab 类似github&#xff0c;可以用来管理代码。当然除了他们两个还有很多代码管理的工具&#xff0c;国内的也有。我这篇文章就只讲gitlab的安装过程。但是gitlab并不是轻量级的东西&#xff0c;占用大概4~8G的内存&#xff0c;特别是merge的代码比较多的时候&#xff0c;占…

一些常用的linux命令(2)

参考&#xff1a;http://www.cnblogs.com/laov/p/3541414.html 系统管理命令 stat 显示指定文件的详细信息&#xff0c;比ls更详细 who 显示在线登陆用户 whoami 显示当前操作用户 hostname 显示主机名 uname 显示系统信…

迭代

迭代 文章目录迭代内置可迭代对象 range&#xff08;&#xff09;内置函数使用 map&#xff08;函数加对象&#xff09;函数定义与参数定义传参作用域函数参数传值可迭代对象支持迭代协议 遍历循环 因为 迭代协议 方法—next—&#xff08;&#xff09;函数next消耗内存小所占空…

python os renames_Python3 os.renames() 方法

概述os.renames() 方法用于递归重命名目录或文件。类似rename()。语法renames()方法语法格式如下&#xff1a;os.renames(old, new)参数old -- 要重命名的目录new --文件或目录的新名字。甚至可以是包含在目录中的文件&#xff0c;或者完整的目录树。返回值该方法没有返回值实例…

普通人的节奏

在立春当夜&#xff0c;这南方城市的上空响起了2020年的第一声春雷&#xff0c;大家都期待着这一声霹雳除去一切霉噩&#xff0c;带来万象更新。之后的天气逐渐变好&#xff0c;近日来更是风和日丽。前日&#xff0c;去采购食品和日用品&#xff0c;久不出门&#xff0c;趁好天…

DDD领域模型自动生成?

我不想写代码&#xff0c;只想通过界面配置一下就能自动生成代码多好&#xff0c;如果界面也能自动生成&#xff0c;那就更好了转载于:https://www.cnblogs.com/PerfectBeauty/p/7351849.html

函数与lambda

文章目录参数匹配将形参赋值&#xff08;关键字匹配&#xff09;默认位置匹配解包在元组前加*函数传递字典表&#xff0c;使用**解包字典表两种声明法lambda表达式初学者逻辑采用字典表可以实现委托map函数把列表对象每一个拿出来放入函数中进行迭代后放入新的列三种方式filter…

还没学python_2个月过去了!还没学会python?用《流畅的python》15天带你学会

学了很久python&#xff0c;还是完全没有思路自己学了很久的python&#xff0c;还是感觉没学到什么&#xff0c;出现这样的情况的python学习者有很多&#xff0c;只是大多都是放弃了&#xff01;出现这样的原因主要有以下三点&#xff1a;1、没有人带领&#xff0c;遇到问题解决…

Linux内核奔溃分析

前言最近遇到一个kernel奔溃的问题&#xff0c;错误日志开头一部分如下&#xff1a;[ 355.2624510] Unhandled fault: external abort on non-linefetch (0x008) at 0xfe004328 [ 355.2645470] Internal error: : 8 [#1] PREEMPT SMP ARM [ 355.2696320] Modules linked in:…

DataGridView带图标的单元格实现

目的&#xff1a; 扩展 C# WinForm 自带的表格控件&#xff0c;使其可以自动判断数据的上下界限值&#xff0c;并标识溢出。 这里使用的方法是&#xff1a;扩展 表格的列 对象&#xff1a;DataGridViewColumn。 1.创建类&#xff1a;DataGridViewDecimalCheckCell.cs public cl…

包与模块管理及面向对象初步

模块 文章目录模块指令原因步骤搜索范围加目录面向对象编程封装实现初始化函数![在这里插入图片描述](https://img-blog.csdnimg.cn/20200201081513814.png?x-oss-processimage/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80M…

spring生命周期七个过程_Spring杂文(三)Spring循环引用

众所周知spring在默认单例的情况下是支持循环引用的Appconfig.java类的代码Configurable ComponentScan("com.sadow") public class Appconfig { }X.java类的代码Component public class X {AutowiredY y;public X(){System.out.println("X create");} }Y.…

Linux 系统中的dvfs功能

前言最近硬件的同事需要我们提供的版本能动态调频&#xff0c;何为动态调频呢&#xff1f;对于CPU来讲&#xff0c;功耗和性能是一对不可调和的矛盾&#xff0c;通过调整CPU的电压和频率&#xff0c;可以在功耗和性能之间找一个平衡点。由于调整是在系统运行的过程中&#xff0…

python是面向对象还是过程_python编程:面向对象与过程是什么?

编程任何一个要素的学习都是基于更方便&#xff0c;更快捷&#xff0c;更效率而存在的&#xff0c;当然面向对象也一样&#xff0c;针对这部分知识&#xff0c;大家可以浏览以下内容&#xff0c;看完即懂。先来看一组示例&#xff1a;面向过程思维&#xff1a;把大象装进冰箱需…