存储过程和函数具体的区别:

核心提示:本质上没区别。只是函数有限制只能返回一个标量,而存储过程可以返回多个。并且函数是可以嵌入在SQL中使用的,可以在SELECT等SQL语句中调用,而存储过程不行。执行的本质都一样。

函数限制比较多,如不能用临时表,只能用表变量等,而存储过程的限制相对就比较少。

1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。

2. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象。

3. 存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数

可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面

4. 当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在

procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。

Procedure cache:中保存的是执行计划,当编译好之后就执行procedure cache中的execution plan,之后SQL SERVER会根据每个execution plan的实际情况来考虑是否要在cache中保存这个plan,评判的标准一个是这个execution plan可能被使用的频率;其次是生成这个plan的代价,也就是编译的耗时。保存在cache中的plan在下次执行时就不用再编译了。

    存储过程:可以使得对的管理、以及显示关于及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。

可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点

(1)功能强大,限制少。

(2)可以在单个存储过程中执行一系列 SQL 语句。

(3)可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。

(4)存储过程在创建时即在上进行编译,所以执行起来比单个 SQL 语句快。

(5)可以有多个返回值,即多个输出参数,并且可以使用SELECT返回结果集。

函数:是由一个或多个 SQL 语句组成的子程序,可用于封装代码以便重新使用。自定义函数诸多限制,有许多语句不能使用,许多功能不能实现。函数可以直接引用返回值,用表变量返回记录集。但是,用户定义函数不能用于执行一组修改全局数据库状态的操作

转自(http://blog.sina.com.cn/s/blog_48a45b950100ip4o.html)

  1.                                              事务
    1、什么是事务
    事务是一个不可分割的工作逻辑单元,它包含了一组数据库的操作命令,并且所有命令作为一个整体一起向系统提交或撤销操作请求,即要么都执行,要么都不执行
      2、事务的4个属性
    (1)、原子性(Atomicity):事务是一个完整的操作,事务个元素不可分
    (2)、一致性(Consistency):当事务完成时,数据必须处于一致状态
    (3)、隔离性(Isolation):对数据进行修改的所有并发事务时彼此隔离的,这表明事务必须时独立的,它不应该以任何方式依赖于或影响其他事务
    (4)、持久性(Durability):事务完成后,它对于系统的影响是永久性的
    3、创建事务的语法:
    --开始事务--
    begin transaction
    --定义变量,累计事务执行过程中的错误--
    declare @errorSum int
    set @errorSum=0 --初始化为0,即无错误
    --增删改操作---
    set @errorSum = @errorSum +@@error --累计是否有错误
    ........ --根据是否有错误,确定事务是提交还是撤销--
    if(@errorSum=0)
    commit transaction --提交事务
    else
    rollback transaction --撤销事务 注意:变量@errorSum只对增删改进行操作,查询并不需要  4、什么时候使用事务
    当一个操作由多个增删改组成的时候,则应用事务 索引 1、什么是索引
    它是SQL Server编排数据的内部方法,为SQL Server提供一种方法来编排查询数据的路径,相当于字典里的目录
    2、索引的分类
    (1)、唯一索引:唯一索引不允许两行具有相同的索引值
    (2)、主键索引:在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型
    (3)、聚集索引: 表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能由一个
    (4)、非聚集索引:非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以是多个,小于249个
    3、创建索引
    语法:
    create [unique] [clustered | nonclustered] index index_name
    on table_name (column_name[,column_name]....)
    [
    fillfactor=x
    ] unique指定唯一索引,可选
    clustered、nonclustered指定是聚集索引还是非聚集索引,可选
    fillfactor表示填充因子,指定一个0~100的值,该值指示索引页填满的空间所占的百分比 示例:
    use stuDB
    go
    /*--检测是否存在该索引(索引存放在系统表sysindexes中)--*/
    if exists(select name from sysindexes
    where name='ix_stumarks_writtenexam')
    drop index stumarks.ix_stumarks_writtenexam --删除索引
    /*--笔试列创建非聚集索引:填充因子为30%--*/
    create nonclustered index ix_stumarks_writtenexam
    on stumarks(writtenexam)
    with fillfactor=30
    go 3、应该创建索引和不应该创建索引
    应该创建索引:
    经常以这个列进行查询
    经常以这个列进行排序
    不应该创建索引:
    表的数据量小时,不应创建(会先查索引页,然后再表)
    当某列的值经常发生变更(修改数据会影响到索引页)
    当该列的值比较单一的情况(比如该列的值为性别 男和女)
    视图
    1、什么是视图
    视图是另一种查看数据库中一个或多个表中的数据的方法,视图是一种虚拟表
    2、语法
    create view view_name
    as <select语句>
    注意:视图可以对表进行增删改查, 但建议不对其使用增删改,多用来进行查询
  2. 转自(http://blog.csdn.net/flanet/article/details/7595907)

sqlserver中的存储过程 函数 事物 索引及视图的更多相关文章

  1. 查询SQLServer2005中某个数据库中的表结构、索引、视图、存储过程、触发器以及自定义函数

    查询SQLServer2005中某个数据库中的表结构.索引.视图.存储过程.触发器以及自定义函数 2013-03-11 09:05:06|  分类: SQL SERVER|举报|字号 订阅     ( ...

  2. (转)笔记320 SQLSERVER中的加密函数 2013-7-11

    1 --SQLSERVER中的加密函数 2013-7-11 2 ENCRYPTBYASYMKEY() --非对称密钥 3 ENCRYPTBYCERT() --证书加密 4 ENCRYPTBYKEY() ...

  3. mysql 视图 触发器 存储过程 函数事务 索引

    mysql 视图 触发器 存储过程 函数事务 索引 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当 ...

  4. SQLSERVER中的 CEILING函数和 FLOOR函数

    SQLSERVER中的 CEILING函数和 FLOOR函数 --SQLSERVER中的 CEILING函数和 FLOOR函数 --ceiling函数返回大于或等于所给数字表达式的最小整数. --fl ...

  5. 【转载】Sqlserver中使用Round函数对计算结果四舍五入

    在实际应用的计算中,很多时候我们需要对最后计算结果四舍五入,其实在Sqlserver中也有对应的四舍五入函数,就是Round函数,Round函数的格式为Round(column_name,decima ...

  6. SQLServer中间接实现函数索引或者Hash索引

    本文出处:http://www.cnblogs.com/wy123/p/6617700.html SQLServer中没有函数索引,在某些场景下查询的时候要根据字段的某一部分做查询或者经过某种计算之后 ...

  7. 【转载】 Sqlserver中查看自定义函数被哪些对象引用

    Sqlserver数据库中支持自定义函数,包含表值函数和标量值函数,表值函数一般返回多个数据行即数据集,而标量值函数一般返回一个值,在数据库的存储过程中可调用自定义函数,也可在该自定义函数中调用另一个 ...

  8. 日期时间函数 mysql 和sqlserver 中对于常用函数的日期和时间函数的区别

    1. sqlserver中获取时间用getdate(),默认返回格式是2019-01-21 13:58:33.053,具体的年月日,时分秒毫米,年月日之间用短线连接,时分秒之间用冒号连接,秒和毫米之间 ...

  9. sqlserver中 事物 索引及视图

      事务 1.什么是事务 事务是一个不可分割的工作逻辑单元,它包含了一组数据库的操作命令,并且所有命令作为一个整体一起向系统提交或撤销操作请求,即要么都执行,要么都不执行 2.事务的4个属性 (1). ...

随机推荐

  1. MSDN上的异步socket 服务端例子

    MSDN上的异步socket 服务端例子 2006-11-22 17:12:01|  分类: 代码学习 |  标签: |字号大中小 订阅     Imports SystemImports Syste ...

  2. Java基础学习总结(52)——Liunx系统Centos上搭建Java开发环境

    一.安装jdk 1.查看Linux自带的JDK是否已安装 [plain] view plain copy print? java –version 如果出现openjdk,最好还是先卸载掉openjd ...

  3. How to Rotate Tomcat catalina.out

    If catalina.out becomes 2GB in size, tomcat crashes and fails to start without any error message. To ...

  4. amazeui学习笔记--css(布局相关3)--辅助类Utility

    amazeui学习笔记--css(布局相关3)--辅助类Utility 一.总结 1.元素清除浮动: 添加 am-cf 这个 class 即可 2.水平滚动: .am-scrollable-horiz ...

  5. 51nod Bash游戏(V1,V2,V3,V4(斐波那契博弈))

    Bash游戏V1 有一堆石子共同拥有N个. A B两个人轮流拿.A先拿.每次最少拿1颗.最多拿K颗.拿到最后1颗石子的人获胜.如果A B都很聪明,拿石子的过程中不会出现失误.给出N和K,问最后谁能赢得 ...

  6. Redis学习笔记(六)---List

    1.ArrayList与LinkList的区别 ArrayList的使用数组存入的方式,所以根据索引查询数据速度快,而增删元素是比较慢的,它需要将数据一位一位的移动,知道达到要求. LinkList使 ...

  7. java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: student is not mapped

    Spring 5.0 +Jpa,使用@Query实现 自定义查询报错: java.lang.IllegalArgumentException: org.hibernate.hql.internal.a ...

  8. 线程TLAB区域的深入剖析

    (1) 堆是JVM中所有线程共享的,因此在其上进行对象内存的分配均需要进行加锁,这也导致了new对象的开销是比较大的 (2) Sun Hotspot JVM为了提升对象内存分配的效率,对于所创建的线程 ...

  9. swift项目第八天:自定义转场动画以及设置titleView的状态

    如图效果: 一:Home控制器 /* 总结:1:设置登陆状态下的导航栏的左右按钮:1:在viewDidLoad里用三目运算根据从父类继承的islogin的登陆标识来判断用户是否登陆来显示不同的界面.未 ...

  10. POJ 2546 Circular Area 几何

    http://poj.org/problem?id=2546 晚上发现鼠标快不行了了!!!鼠标你肿么了,肿么突然就按键不灵了,哭,谁送我一只呀,奖励我舍友一只.哈哈.开玩笑滴~ 舍友大怒说" ...