SQL-TSQL
一、系统存储过程 常用
sp_helptext
--查看可编程性(存储过程、函数、触发器、规则、默认值),表中(约束、触发器)
EXEC sp_helptext f_M_Student
二、全局变量 常用
@@IDENTITY
--最后插入的值ID主键
INSERT INTO UserTable
(
-- UserID -- this column value is auto-generated
UserName,
NewClo
)
VALUES
(
'西伯利亚的狼', )
SELECT @@IDENTITY AS 'Identity'
--先执行这一段脚本
INSERT INTO UserTable
(
-- UserID -- this column value is auto-generated
UserName,
NewClo
)
VALUES
(
'你好呀1', )
WAITFOR DELAY '00:00:10'
--返回的主键ID任然为这一个插入的ID
SELECT @@identity --在执行这一段脚本
INSERT INTO UserTable
(
-- UserID -- this column value is auto-generated
UserName,
NewClo
)
VALUES
(
'你好呀2', )
@@ROWCOUNT
--上一条语句影响的行数
SELECT * FROM Student AS s WHERE s.StuName LIKE '%名字%'
SELECT @@ROWCOUNT
@@ERROE
DECLARE @ErrorFlag INT
RAISERROR ('不好意思,你没有权限!',,)
SET @ErrorFlag=@@ERROR --全局错误只能在紧接着的下一步获取到,然后有默认设置为0
SELECT @@ERROR
SELECT @ErrorFlag
SET NOCOUNT ON;
SET XACT_ABORT ON; --执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚 BEGIN TRY
BEGIN TRANSACTION T INSERT INTO UserTable
(
-- UserID -- this column value is auto-generated
UserName,
NewClo
)
VALUES
(
'起实物测试1', ) RAISERROR ('不好意思,你没有权限!',,) --会影响到PL/SQL的流程, 比如你若在TRY块中RAISERROR了一个严重程度小于11的, 他会直接反馈给调用者, 而不会去走CATCH块了 SELECT GETDATE() COMMIT TRANSACTION T
END TRY
BEGIN CATCH
DECLARE @msg nvarchar()=ERROR_MESSAGE() --将捕捉到的错误信息存在变量@msg中
RAISERROR (@msg,,) --此处才能抛出(好像是这样子....)
ROLLBACK TRANSACTION T --出錯回滾事務
END CATCH
三、常用函数
长度分析函数
--所占的字符数,不含尾部空格
SELECT DATALENGTH('你好呀')
--字符数,不含尾部空格
SELECT LEN('你好呀')
--子串,第二个参数开始位置,第三个参数长度
--开始位置为1
SELECT SUBSTRING('西伯利亚的狼',,)
--左部截取,第二个参数未截取的数量
SELECT LEFT('西伯利亚狼',)
--右部截取
SELECT RIGHT('西伯利亚的狼',)
基本字符串操作
--替换
UPDATE UserTable
SET
UserName =replace(UserName,'','')
--转为大写
SELECT UPPER('qwe1')
--转为小写
SELECT LOWER('QWE23')
--生成空格
SELECT ''+SPACE()+''
--第一个参数:待截取的字符串
--第二个参数:截取开始位置
--第三个参数:截取的长度
--第四个参数:把截取好的参数拼加在他的后面
SELECT STUFF('西伯利养的狼',,,'我是一个新的')
--字符串反转
SELECT REVERSE('西伯利亚的狼')
--删除左侧空格
SELECT LTRIM(' 123 ')
--删除右侧空格
SELECT RTRIM(' 123 ')
字符串查找
--第一个参数在第二个参数中的起始位置,没有匹配到返回0
SELECT CHARINDEX('','')
--匹配,可以加通配符 0没有匹配到返回0
SELECT PATINDEX('%0%','')
SELECT PATINDEX('%0','')
SELECT PATINDEX('_0','')
SELECT PATINDEX('','')
SELECT PATINDEX('0%','')
GUID
SELECT NEWID()
SELECT *,NEWID() orID FROM Student AS s ORDER BY orID
数学函数(三角函数未列出)
--绝对值
SELECT ABS(-)--
--大于等于 的最小整数
SELECT CEILING(10.3)--
SELECT CEILING()--
--小于等于 的最大值
SELECT FLOOR(10.3)--
SELECT FLOOR()--
--次幂 2的3次方
SELECT POWER(,) --**=
--次幂 以e为底
SELECT EXP() --e*e*e
--自然对数值
SELECT LOG(EXP()) --
--以10为底的对数值
SELECT LOG10() --
--四舍五入 精确位数
SELECT ROUND(10.2345,) --10.2350
--返回一个0-1之间的随机值
SELECT RAND()--0.715436657367485(随机的)
--判断正负0数
SELECT SIGN() --
SELECT SIGN(-) -- -
SELECT SIGN() --
--平方根
SELECT SQRT() --
日期函数
SELECT GETDATE()
--sqlserver 的日期部分 datepart
--日期部分 写法 取值范围
--YEAR yy -
--quarter(季度 qq -
--MONTH mm -
--Dayofyear dy -
--DAY dd -
--week wk -
--weekday dw -(Mon-Sun)
--Hour hh -
--Minute mi -
--SECOND ss -
--Millisecond ms -
--返回日期中的指定部分 根据环境转化成适合的名字(比如下面的星期五)
SELECT DATENAME(quarter,GETDATE())--
SELECT DATENAME(qq,GETDATE()) --
SELECT DATENAME(dw,GETDATE()) --星期五
--返回日期中的指定部分
SELECT DATEPART(dw,GETDATE()) --
--时间差
SELECT DATEDIFF(yy,GETDATE(),'2016/01/01')
--时间增加
SELECT DATEADD(dd,,GETDATE())
--返回日期值
SELECT DAY(GETDATE()) SELECT YEAR(GETDATE()) SELECT MONTH(GETDATE())
四、常用逻辑关键字
BEGIN END
语句块
CASE WHEN THEN
--WHEN NULL 不起作用
SELECT *,CASE s.StuName WHEN '默认名字' THEN '默认' when NULL then '我是NULL' else '不是默认' end FROM Student AS s
--最好用case when 字段 条件(比较灵活)
SELECT *,CASE WHEN s.StuName='默认名字' THEN '默认' when s.StuName is NULL then '我是NULL' else '不是默认' end FROM Student as s
IF BEGIN END ELSE BEGIN END
DECLARE @iielseFlag INT;
SET @iielseFlag = IF (@iielseFlag <= )
BEGIN
PRINT('小于0');
END
ELSE
BEGIN
PRINT('(0,+oo)')
END
DECLARE @iielseFlag INT;
SET @iielseFlag = IF (@iielseFlag <= )
BEGIN
PRINT('小于0');
END
ELSE
IF(@iielseFlag <= )
BEGIN
PRINT('(0,5]')
END
ELSE
BEGIN
PRINT('其他')
END
WHILE BEGIN END
DECLARE @WHILEFLAG INT =;
WHILE (@WHILEFLAG<)
BEGIN
PRINT(@WHILEFLAG);
SET @WHILEFLAG=@WHILEFLAG+;
END
GOTO
不使用,破环结构。
RETURN
--在批处理 存储过程 触发器中无条件退出,不在执行本语句之后的任何语句。
RETURN;
会返回一个整数,代表着不同的状态 0成功,其他负数都是错误的。
0成功
-1找不到对象
-2数据类型错误
-3死锁
-4违反权限原则
-5语法错误
-6用户造成的一般错误
-7资源错误,如磁盘空间不足
-8非致命内部错误
-9已达到系统的极限
- -11致命的内部不一致性错误
-12表或指针破坏
-13数据库破环
-14硬件错误
WAITFOR
SQLserver有两种方法定时指定任务1,代理,2,waitfor
WAITFOR {DELAY 'time'|TIME 'time'}
WAITFOR DELAY '00:00:10'
SELECT * FROM Student AS s
--根据当前时间设置 等到下午4点51执行
WAITFOR TIME '16:51'
SELECT * FROM Student AS s
批处理(GO)
一条或者多条T-SQL语句的集合,SQLserver会把他当成一个整体,进行分析,在优化,编译,执行。
分类
,应用程作为一个执行单元发出的所有SQL语句构成一个批处理,并且生成单个执行计划。
,存储过程或者触发器内部所有语句构成一个批处理,他们都会自动编译为一个还行计划。
、由EXEC执行的字符串是一个批处理。exec('select * from student'),并编译为执行计划。
、系统存储过程sp_executesql执行的字符串是一个批处理,并便以为执行计划。 exec sp_executesql N'select * from student'
结束退出
、GO批处理结束标志,编译器执行到GO时,前面的所有语句当成一个批处理执行,GO不是T-SQL语句,而是可以被SQLserver 分析器识别的命令。
、GO不能和T-SQL处于一行。但是这一行可以有注释。
、局部变量只局限在一个批处理中,不会再GO以后引用。
SQL-TSQL的更多相关文章
- SQL/T-SQL实例参考
,D.[Score] B_Score ,'Distince'= CASE WHEN C.Score > D.Score THEN C.[Score] - D.[Score] WHEN C.Sco ...
- sql: T-SQL 统计计算(父子關係,樹形,分級分類的統計)
---sql: T-SQL 统计计算(父子關係,樹形,分級分類的統計) ---2014-08-26 塗聚文(Geovin Du) CREATE PROCEDURE proc_Select_BookKi ...
- SQL/T-SQL实例参考-2
对多关联查询,查询多中的记录,但是返回一的结果集 子查询语法 --一对多关联查询,查询多中的记录,但是返回一的结果集 SELECT C.* FROM ( SELECT A.BasicID FROM [ ...
- SQL/T-SQL实例参考-1
CASE ,D.[Score] B_Score ,'Distince'= CASE WHEN C.Score > D.Score THEN C.[Score] - D.[Score] WHEN ...
- [SQL]T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)
T-Sql 递归查询(给定节点查所有父节点.所有子节点的方法) -- 查找所有父节点with tab as( select Type_Id,ParentId,Type_Name from Sys_ ...
- sql: T-SQL parent-child function script
--Parent-Child reationship --涂聚文 2014-08-25 --得位置的子節點函數表(包含本身) if exists (select * from dbo.sysobjec ...
- T-SQL、JET SQL、PL-SQL
数据库分为网状.层状.关系.对象四种类型,目前的数据库一般都是属于关系数据库(包括MYSQL和SQL SERVER),网状.层状基本上已成历史,对象类型尚未普及. SQL 语言是有 ANSI 标准的. ...
- 全面对比T-SQL与PL/SQL
1)数据类型 TSQL PL/SQL numeric(p,s) numeric(p,s) or NUMBER(p,s) decimal(p,s) decimal(p,s) or NUMBER(p,s) ...
- 到T-SQL DML 三级的阶梯:在SQL server中实现关系模型
作者: Gregory Larsen, 2017/08/02 (第一次出版: 2011/11/09) 翻译:谢雪妮,许雅莉,赖慧芳,刘琼滨 译文: 系列 该文章是阶梯系列的一部分:T-SQL DML的 ...
- RML Utilities for SQL Server
很早以前有看到过关于使用RML Utilities工具分析SQL Trace(.trc)的文章,但一直没有具体实践.最近接管一台数据库服务器,跟踪出一批高消耗的语句,老大需要跟踪分析报表,罗列出过程( ...
随机推荐
- P2543 [AHOI2004]奇怪的字符串
题目描述 输入输出格式 输入格式: 输入文件中包含两个字符串X和Y.当中两字符串非0即1.序列长度均小于9999. 输出格式: X和Y的最长公共子序列长度. 输入输出样例 输入样例#1: 复制 010 ...
- 洛谷P2305 [NOI2014]购票 [DP,树状数组]
传送门 思路 显然是树形DP,显然是斜率优化,唯一的问题就是该怎么维护凸包. 套路1:树上斜率优化,在没有这题的路程的限制的情况下,可以维护一个单调栈,每次加入点的时候二分它会加到哪里,然后替换并记录 ...
- node的小知识点
今天开始阅读node.js深入浅出这本书,阅读过程中会对某些理解有新的认识,所以特地把这些新认识或者知识点记录在这篇博客中 1.nodejs的优势在于 事件驱动.高并发.异步I/O 不适合cpu密集型 ...
- eclipse中Maven项目启动报错“3 字节的 UTF-8 序列的字节 3 无效。”
发生原因不知道. 解决方法是在pom.xml中追加 <properties> <project.build.sourceEncoding>UTF-8</project.b ...
- 1 课务 iOS 概述
重要注意 紫色解释 蓝色分类 新内容 CS193P 本课老版本 2010 年冬 http://open.163.com/movie/2010/6/C/7/M6RU83DCT_M6RU957C7.htm ...
- 关于Kernel的思考
学习播客_KLDA(推导得很通俗,下面的推导就是源于此篇博客) 第一部分:按照自己的理解,模仿抄!学习播客来完成一下KLDA的推导. 第二部分:对于Kernel的思考 KLDA:顾名思义,就是把Ker ...
- 【Oracle/Java】以Insert ALL方式向表中插入百万条记录,耗时9分17秒
由于按一千条一插程序长期无反应,之后改为百条一插方式,运行完发现插入百万记录需要9m17s,虽然比MySQL效率差,但比单条插入已经好不少了. 对Oracle的批量插入语法不明的请参考:https:/ ...
- Android向系统日历添加日程提醒事件
在项目开发过程中,有时会有预约提醒.定时提醒等需求,这时我们可以使用系统日历来辅助提醒.通过向系统日历中写入事件.设置提醒方式(闹钟),实现到达某个特定的时间自动提醒的功能.这样做的好处是由于提醒功能 ...
- ELK 二进制安装并收集nginx日志
对于日志来说,最常见的需求就是收集.存储.查询.展示,开源社区正好有相对应的开源项目:logstash(收集).elasticsearch(存储+搜索).kibana(展示),我们将这三个组合起来的技 ...
- ubuntu server 18.04 单机安装openstack
https://ubuntu.com/openstack/install#workstation-deployment sudo snap install microstack --classic - ...