zoukankan      html  css  js  c++  java
  • SQL Server 存储过程、函数、触发器的定义

    一、定义存储过程

      当存储过程需要有返回值时,可以使用output关键字或return关键字。output和return不能同时使用

    --定义
    create procedure program
        --@parameter int 定义参数
        --@parameter int output 利用output关键字返回接口
    as 
    begin 
        print '';
        --return ''; 利用return关键字返回结构
    end
    --调用 execute 存储过程名 参数
    execute program
    --赋值的方式调用
    declare @cc varchar(10)
    execute @cc = program

    二、定义函数

      1. 标量值函数:

        返回一个确定类型的标量值,例如:int,char,bit等

    --创建标量值函数
    create function func_1(@func_parameter_1 int,@func_parameter_2 int)
    returns int
    as 
    begin 
        return 1
    end

      2. 表值函数

        内联表值函数和多语句表值函数,都叫做表值函数,只是在定义返回值时,多语句确定了返回表的字段

    --内联表值函数
    create function func_table(@parameter_id varchar(36))
    returns table
    as
    return select ID,Name from Members where ID = @parameter_id
    go
    --多语句表值函数
    create function func_table1(@parameter_id varchar(36))
    returns @tab_1 table(
        ID varchar(36),
        Name varchar(10)
    )
    as
    begin
        insert into @tab_1 select ID,Name from Members
        return
    end

      3.调用函数

        在存储过程中调用函数时,需要带上“dbo.” 看看是那个数据库的。表值函数也可以用“insert into ……select ‘函数’ ”赋值给表变量或临时表等

    -- 标量函数
    declare @params varchar(100)
    select @params = dbo.func_1(1,2);
    -- 表值函数
    select * from func_3('parameter_varchar');
    select @params = Name from func_table('parameter_varchar');

    三、触发器

    --基本语法
    create trigger Trigger_Name
    on TableName for type --type:insert,update,delete 
    as
    --执行逻辑

      1. insert 定义触发器并获取当前值

    create trigger Member_Inserts
    on Member for insert
    as
    declare @id varchar(36)
    select @id = id from inserted;
    insert into Member(ID,Sex) values(@id+'insert',0);

      2. update 触发器

      update 触发器获取修改前的值和修改后的值。update操作等于先删除记录,再插入新的记录

    create trigger Member_Updates
    on Member for update
    as
    declare @idnew varchar(36);
    declare @idold varchar(36);
    select @idnew = id from inserted;--inserted在修改时存放的新值的临时表
    select @idold = id from deleted;--deleted在修改时存放的旧值的临时表
    insert into Member(ID,Sex) values(@idnew+'new',0);
    insert into Member(ID,Sex) values(@idold+'old',0);

      3.delete 触发器

    create trigger Member_Deletes
    on Members for delete
    as
    declare @idold varchar(36);
    select @idold = id from deleted;--deleted在修改时存放的旧值的临时表
    insert into Members(ID,CreateTime,Author,Status) values(NEWID(),GETDATE(),@idold,0)
  • 相关阅读:
    atcoder 2017Code festival C ——D题 Yet Another Palindrome Partitioning(思维+dp)
    51nod 1089最长回文子串V2 (manacher)
    Codeforces Round #362(Div1) D Legen...(AC自动机+矩阵快速幂)
    51nod 1532 带可选字符的多字符串匹配(位运算)
    51nod 1317 相似字符串对(容斥原理+思维)
    51nod 1526 分配笔名(字典树+贪心)
    51nod 1292 字符串中的最大值V2(后缀自动机)
    51nod 1277字符串中的最大值(拓展kmp)
    SPOJ:[DIVCNT3]Counting Divisors
    单纯形法模板
  • 原文地址:https://www.cnblogs.com/haosit/p/10766538.html
Copyright © 2011-2022 走看看