• 允许定位在结果集的特定行。
  • 从结果集的当前位置检索一行或一部分行。
  • 支持对结果集中当前位置的行进行数据修改。
  • 为由其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持。
  • 提供脚本、存储过程和触发器中用于访问结果集中的数据的 Transact-SQL 语句

    在从游标中提取信息后,可以通过判断@@FETCH_STATUS 的值来判断是否到了最后。当@@FETCH_STATUS为0的时候,说明提取是成功的,否则就可以认为到了最后。

    点评:

    游标是进行数据库操作的一个重要概念,但是在现代的软件开发中应用的不是很多,只有在一些特殊的存储过程中才会应用。但是,毕竟这是一个很重要,也是我们必须掌握的概念,最好能理解它的原理和用法。

     

    4、SQL Server的两种索引是何形式?索引的作用?索引的优缺点?

    sql server的索引分为聚集索引和非聚集索引,下面分别说明:
    聚集索引
    聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。索引定义中包含聚集索引列。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序。
    只有当表包含聚集索引时,表中的数据行才按排序顺序存储。如果表具有聚集索引,则该表称为聚集表。如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。

    非聚集索引
    非聚集索引具有独立于数据行的结构。非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。
    从非聚集索引中的索引行指向数据行的指针称为行定位器。行定位器的结构取决于数据页是存储在堆中还是聚集表中。对于堆,行定位器是指向行的指针。对于聚集表,行定位器是聚集索引键。

    索引的作用主要是为了在查询时提高查询的效率,并且尽量减小更新时的开销。

    优点:

    设计良好的索引查询效率可以得到极大的提高,某些情况下甚至可以提高几百上千倍。

    缺点:

    需要占用额外的空间和资源。在更新时耗费的时间更大,因为对数据的更新很有可能会导致索引的更新,这样就会导致增加系统开销。

    点评:

    在所有的进行系统优化的选择中,索引都是第一位的,一个设计良好的数据库肯定需要高超的索引设计技巧,在这方面效率提高不是一倍两倍的问题,而是可能会有质的飞跃,对索引优化的重要性,在一个大型项目里,怎么说都不为过。但是,索引优化又是比较困难的,哪些列需要加入索引,列的顺序怎样,哪个索引需要设置为聚集索引等等,都是我们必须要考虑的问题。

     

    5、事务是什么?

    事务是单个的工作单元。如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分。

    如果事务遇到错误且必须取消或回滚,则所有数据修改均被清除。

    也就是说,事务是由一系列的“原子”操作组成的,这些原子操作必须全部完成,否则所有的动作都会被取消并恢复到初始状态。

    开始事务使用BEGIN TRANSACTION 语句显,以 COMMIT 或 ROLLBACK 语句结束。

    以上是针对数据库来说的。

    但是,事务不仅仅限于数据库,数据库以外的动作也可以被组合进事务中,一般称为“企业级事务”。举一个例子:我们有这两个操作必须都完成,即在向数据库插入一条记录后必须在硬盘的某个文件夹内创建一个文件,这个就是一个企业级事务,它超出了简单的数据库事务的范畴。我们可以通过编程来实现企业级事务。

    点评:

    事务是数据库开发中一个非常重要的概念,它对与保证数据库的完整性和一致性非常重要。对于事务的的C#代码实现更是务必要熟练掌握。

     

    6、存储过程和函数的区别

    •存储过程,功能强大,可以执行包括修改表等一系列数据库操作,也可以创建为 SQL Server 启动时自动运行的存储过程。
    •自定义函数,用户定义函数不能用于执行一组修改全局数据库状态的操作。
     

    •存储过程,可以使用非确定函数。
    •自定义函数,不允许在用户定义函数主体中内置非确定函数。
     

    •存储过程,可返回记录集。
    •自定义函数,可以返回表变量,也可以有任意个输出参数,
     

    •存储过程,其返回值不能被直接引用,必须单独调用
    •自定义函数,其返回值可以被直接引用,也就是可以直接 select * from 函数

    点评:

    存储过程是数据库开发经常使用的数据库对象之一,我们比较熟悉,但是自定义函数使用的就要少一些,所以对于大部分面试者,这是一个接触较少的知识点,需要花点时间掌握。


    文章来源: