zoukankan      html  css  js  c++  java
  • SQL-TSQL

    一、系统存储过程 常用

     sp_helptext

    --查看可编程性(存储过程、函数、触发器、规则、默认值),表中(约束、触发器)
    EXEC sp_helptext f_M_Student
    View Code
    二、全局变量  常用

     @@IDENTITY

    --最后插入的值ID主键
    INSERT INTO    UserTable
    (
        -- UserID -- this column value is auto-generated
        UserName,
        NewClo
    )
    VALUES
    (
        '西伯利亚的狼',
        1
    )
    SELECT @@IDENTITY AS 'Identity'
    View Code
    --先执行这一段脚本
    INSERT INTO UserTable
    (
        -- UserID -- this column value is auto-generated
        UserName,
        NewClo
    )
    VALUES
    (
        '你好呀1',
        2
    )
    WAITFOR DELAY '00:00:10'
    --返回的主键ID任然为这一个插入的ID
    SELECT @@identity
    
    --在执行这一段脚本
    INSERT INTO UserTable
    (
        -- UserID -- this column value is auto-generated
        UserName,
        NewClo
    )
    VALUES
    (
        '你好呀2',
        2
    )
    View Code

    @@ROWCOUNT

    --上一条语句影响的行数
    SELECT * FROM Student AS s WHERE s.StuName LIKE '%名字%'
    SELECT @@ROWCOUNT
    View Code

    @@ERROE

    DECLARE @ErrorFlag INT
    RAISERROR ('不好意思,你没有权限!',16,1)
    SET @ErrorFlag=@@ERROR  --全局错误只能在紧接着的下一步获取到,然后有默认设置为0
    SELECT @@ERROR
    SELECT @ErrorFlag
    View Code
    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',
        2
    )
    
        RAISERROR ('不好意思,你没有权限!',16,1)    --会影响到PL/SQL的流程, 比如你若在TRY块中RAISERROR了一个严重程度小于11的, 他会直接反馈给调用者, 而不会去走CATCH块了
    
        SELECT GETDATE()
        
        COMMIT TRANSACTION T
    END TRY
    BEGIN CATCH
        DECLARE @msg nvarchar(2000)=ERROR_MESSAGE()    --将捕捉到的错误信息存在变量@msg中               
        RAISERROR (@msg,16,1)    --此处才能抛出(好像是这样子....)
        ROLLBACK TRANSACTION T  --出錯回滾事務
    END CATCH
    View Code
    三、常用函数

     长度分析函数

    --所占的字符数,不含尾部空格
    SELECT DATALENGTH('你好呀') 
    --字符数,不含尾部空格  
    SELECT LEN('你好呀')
    --子串,第二个参数开始位置,第三个参数长度 
    --开始位置为1 
    SELECT SUBSTRING('西伯利亚的狼',1,3)
    --左部截取,第二个参数未截取的数量
    SELECT LEFT('西伯利亚狼',3)  
    --右部截取
    SELECT RIGHT('西伯利亚的狼',3)
    View Code

    基本字符串操作

    --替换
    UPDATE UserTable
    SET
        UserName =replace(UserName,'1','2')
    --转为大写
    SELECT UPPER('qwe1')
    --转为小写
    SELECT LOWER('QWE23')
    --生成空格
    SELECT '1'+SPACE(40)+'2'
    --第一个参数:待截取的字符串
    --第二个参数:截取开始位置
    --第三个参数:截取的长度
    --第四个参数:把截取好的参数拼加在他的后面
    SELECT STUFF('西伯利养的狼',2,3,'我是一个新的')
    --字符串反转
    SELECT REVERSE('西伯利亚的狼')
    --删除左侧空格
    SELECT LTRIM('   123   ')
    --删除右侧空格
    SELECT RTRIM('   123   ')
    View Code

    字符串查找

    --第一个参数在第二个参数中的起始位置,没有匹配到返回0
    SELECT CHARINDEX('123','13234561223')
    --匹配,可以加通配符         0没有匹配到返回0
    SELECT PATINDEX('%0%','1234567890')
    SELECT PATINDEX('%0','1234567890')
    SELECT PATINDEX('_0','1234567890')
    SELECT PATINDEX('0','1234567890')
    SELECT PATINDEX('0%','1234567890')
    View Code

    GUID

    SELECT NEWID()
    SELECT *,NEWID() orID FROM Student AS s ORDER BY orID
    View Code

    数学函数(三角函数未列出)

    --绝对值
    SELECT ABS(-1)--1
    --大于等于  的最小整数
    SELECT CEILING(10.3)--11
    SELECT CEILING(10)--10
    --小于等于  的最大值
    SELECT FLOOR(10.3)--10
    SELECT FLOOR(10)--10
    --次幂   2的3次方
    SELECT POWER(2,3) --2*2*2=8
    --次幂  以e为底
    SELECT EXP(3) --e*e*e
    --自然对数值
    SELECT LOG(EXP(3))  --3
    --以10为底的对数值
    SELECT LOG10(100)    --2
    --四舍五入  精确位数
    SELECT ROUND(10.2345,3)  --10.2350
    --返回一个0-1之间的随机值
    SELECT RAND(100)--0.715436657367485(随机的)
    --判断正负0数
    SELECT SIGN(10) --1
    SELECT SIGN(-10) --   -1
    SELECT SIGN(0)  --0
    --平方根
    SELECT SQRT(100)  --10
    View Code

    日期函数

    SELECT GETDATE()
    --sqlserver 的日期部分   datepart
    --日期部分           写法           取值范围
    --YEAR               yy                1753-9999
    --quarter(季度      qq                1-3
    --MONTH              mm                 1-12
    --Dayofyear          dy                1-366
    --DAY                dd                1-31
    --week               wk                1-54
    --weekday            dw                1-7(Mon-Sun)
    --Hour               hh                0-23
    --Minute             mi                0-59
    --SECOND            ss                0-59
    --Millisecond        ms                0-999
    --返回日期中的指定部分   根据环境转化成适合的名字(比如下面的星期五)
    SELECT DATENAME(quarter,GETDATE())--3
    SELECT DATENAME(qq,GETDATE())     --3
    SELECT DATENAME(dw,GETDATE())     --星期五
    --返回日期中的指定部分
    SELECT DATEPART(dw,GETDATE())     --5
    --时间差    
    SELECT DATEDIFF(yy,GETDATE(),'2016/01/01')
    --时间增加
    SELECT DATEADD(dd,5,GETDATE())
    --返回日期值
    SELECT DAY(GETDATE())
    
    SELECT YEAR(GETDATE())
    
    SELECT MONTH(GETDATE())
    View Code
    四、常用逻辑关键字

    BEGIN END

    语句块
    View Code

    CASE WHEN THEN

    --WHEN NULL 不起作用
    SELECT *,CASE s.StuName WHEN '默认名字' THEN '默认' when NULL then '我是NULL' else '不是默认' end FROM Student AS s
    View Code
    --最好用case when 字段 条件(比较灵活)
    SELECT *,CASE WHEN s.StuName='默认名字' THEN '默认' when s.StuName is NULL then '我是NULL' else '不是默认' end FROM Student as s
    View Code

    IF BEGIN END ELSE BEGIN END

    DECLARE @iielseFlag INT;
    SET @iielseFlag = 10
    
    IF (@iielseFlag <= 0)
    BEGIN
        PRINT('小于0');
    END
    ELSE
    BEGIN
        PRINT('(0,+oo)')
    END
    View Code
    DECLARE @iielseFlag INT;
    SET @iielseFlag = 10
    
    IF (@iielseFlag <= 0)
    BEGIN
        PRINT('小于0');
    END
    ELSE
        IF(@iielseFlag <= 5)
    BEGIN
        PRINT('(0,5]')
    END
    ELSE
        BEGIN
            PRINT('其他')
        END
    View Code

    WHILE BEGIN END

    DECLARE @WHILEFLAG INT =0;
    WHILE (@WHILEFLAG<10) 
    BEGIN
        PRINT(@WHILEFLAG);
        SET @WHILEFLAG=@WHILEFLAG+1;
    END
    View Code

     GOTO

      不使用,破环结构。

    RETURN

    --在批处理 存储过程 触发器中无条件退出,不在执行本语句之后的任何语句。
    RETURN;
    会返回一个整数,代表着不同的状态  0成功,其他负数都是错误的。
    0成功
    -1找不到对象
    -2数据类型错误
    -3死锁
    -4违反权限原则
    -5语法错误
    -6用户造成的一般错误
    -7资源错误,如磁盘空间不足
    -8非致命内部错误
    -9已达到系统的极限
    -10 -11致命的内部不一致性错误
    -12表或指针破坏
    -13数据库破环
    -14硬件错误
    View Code

    WAITFOR

          SQLserver有两种方法定时指定任务1,代理,2,waitfor

    WAITFOR {DELAY 'time'|TIME 'time'
    View Code
    WAITFOR DELAY '00:00:10'
    SELECT * FROM Student AS s
    View Code
    --根据当前时间设置    等到下午4点51执行
    WAITFOR TIME '16:51' 
    SELECT * FROM Student AS s
    View Code

    批处理(GO)

    一条或者多条T-SQL语句的集合,SQLserver会把他当成一个整体,进行分析,在优化,编译,执行。
    View Code

      分类

    1,应用程作为一个执行单元发出的所有SQL语句构成一个批处理,并且生成单个执行计划。
    2,存储过程或者触发器内部所有语句构成一个批处理,他们都会自动编译为一个还行计划。
    3、由EXEC执行的字符串是一个批处理。exec('select * from student'),并编译为执行计划。
    4、系统存储过程sp_executesql执行的字符串是一个批处理,并便以为执行计划。 exec sp_executesql N'select * from student'
    View Code

      结束退出

    1、GO批处理结束标志,编译器执行到GO时,前面的所有语句当成一个批处理执行,GO不是T-SQL语句,而是可以被SQLserver 分析器识别的命令。
    2、GO不能和T-SQL处于一行。但是这一行可以有注释。
    3、局部变量只局限在一个批处理中,不会再GO以后引用。
    View Code
  • 相关阅读:
    javascript变量作用域、匿名函数及闭包
    SenchaTouch2中navigation下嵌入list无事件响应问题解决
    Fedora17安装SSH
    25个必须记住的SSH命令
    linux下安装hadoop
    Fedora17实现图形界面root登录
    virtualBox利用已创建的vdi文件克隆快速创建新虚拟机
    printf/scanf格式修饰符
    windowsServer2003服务器上修改ftp端口号
    为ckeditor添加行距的功能(转载)
  • 原文地址:https://www.cnblogs.com/wudequn/p/7092019.html
Copyright © 2011-2022 走看看