分享

存储过程

 Sophia_Study 2021-05-19

1,Stored Procedures --存储过程

存储过程就是为以后使用而保存的一条或者多条SQL语句。可以将其视为批文件,虽然他们的作用不仅限于批处理。

创建存储过程,存储过程是保存起来的可以接受和返回用户提供的参数的。

GO相当于一个.sql文件的结束标记。

USE:改变当前操作数据库

执行方法:

使用“EXECUTE”。他接受存储过程的名和需要传递给他的任何参数。

注意,关于存储过程,对于表中的表的主键,一般不作为属性传递给存储过程,要想要保证恰当的生成此ID,最好的办法是使用生成此主键ID的过程自动化(而不是依赖于最终的用户的输入)

AS 存储过程语法的一部分,AS之前是存储过程参数和属性定义,AS后面表示存储过程内容的定义。

创建存储过程所涉及的语法:

-->声明变量:Declare

SQL中所有的局部变量的前面都要加入:变量名 变量类型

用【return 变量名】的方式:将所执行的语句的结果返回给调用程序。

创建存储过程用:CREATEPROCEDURE(PROC

执行存储过程用:EXECUTE

显示存储过程所返回的值:SELECT

output的参数是输出参数,执行完了存储过程之后,这个参数的值会发生变化。把执行完后的结果赋给变量。

总结:我们都知道如果一个变量@a是声明在a.sql文件中的,那么在b.sql中是不能为@a赋值的,因为这根本就是两个脚本文件。而GO语句正是起到了分割.sql文件的作用。

总结:GO 语句后面跟数字代表提交的次数,上图中的第一个GO依然起到了示例1中提到的分割.sql文件的作用。

结论:我们应该在存储过程的头部加上SET NOCOUNT ON 这样的话,在退出存储过程的时候加上 SET NOCOUNT OFF这样的话,以达到优化存储过程的目的。

还有一种说法:

前台一般是一个返回就当一个结果集, 不管这个返回是结果集, 还是操作的反馈信息.

为了保证前台得到的只是真实的记录集, 而不是反馈信息, 因此得使用 set nocount on

SQLServer中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT。

      

在写sql sever 的存储过程的日期时间转换时,应当注意是日期还是时间,还是时间加日期格式;同时在判断天数差时,在sql sever中的函数是datediff(d,'日期参数',getdate()),虽然函数名字相同,但是参数不同,其功能基本相同,只有一点不同:在sqlsever中,该函数返回的值是后一个日期参数减去前一个日期参数的值;

 isnull(value1,value2)

1、value1与value2的数据类型必须一致。

2、如果value1的值不为null,结果返回value1。

3、如果value1为null,结果返回vaule2的值。vaule2是你设定的值。

如果在select中就是isnull可以判断是否是null,如果是给个默认值,isnull("字段名","设定默认的数据")

例如:select isnull(fs,6) from xuesheng where name='张三'  在表xuesheng中,fs分数如果为空,结果输出6。如果不为空,输出fs

使索引有用的因素是什么?很简单,就是恰当的排序。

索引用来排序数据以加快搜索和排序操作的速度。

数据库索引的作用也一样。主键数据总是排序的,这是DBMS 的工作。

可以在一个或多个列上定义索引,使DBMS 保存其内容的一个排过序的列表。

索引用CREATE INDEX 语句创建

索引必须唯一命名。这里的索引名prod_name_ind 在关键字CREATE

INDEX 之后定义。ON 用来指定被索引的表,而索引中包含的列(此例中

仅有一列)在表名后的圆括号中给出。

例如:

CREATE INDEX prod_name_ind

ON Products (prod_name);

TRUNCATE TABLE 在功能上与不带 Where 子句的 Delete 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 Delete 速度快,且使用的系统和事务日志资源少。

使用上:

想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.

想删除表,当然用drop

想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.

如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据

select count(*) into v_count from dual;

这条语句的意思是查询dual表的所有记录数,将查询结果存入v_count变量中,也就是给变量设值的用法

CONVERT() 函数是把日期转换为新数据类型的通用函数。

CONVERT() 函数可以用不同的格式显示日期/时间数据。

Float 和 real 数据

float 和 real 数据类型被称为近似的数据类型。在近似数字数据类型方面,float 和 real 数据的使用遵循 IEEE 754 标准。

近似数字数据类型并不存储为多数数字指定的精确值,它们只储存这些值的最近似值。在很多应用程序中,指定值与存储值之间的微小差异并不明显。但有时这些差异也值得引起注意。由于 float 和 real 数据类型的这种近似性,当要求精确的数字状态时,比如在财务应用程序中,在那些需要舍入的操作中,或在等值核对的操作中,就不使用这些数据类型。这时就要用 integer、decimal、money 或 smallmone 数据类型。

在 WHERE 子句搜索条件中(特别是 = 和 <> 运算符),应避免使用 float 或 real 列。最好限制使用 float 和 real 列做 > 或 < 的比较。

IEEE 754 规格提供了四种舍入模式:舍入到最接近的值、上舍入、下舍入和舍入到零。Microsoft® SQL Server™ 使用上舍入。所有的数值必须精确到确定的精度,但会产生细小的浮点值变化。因为浮点数字的二进制表示法可以采用很多合法舍入规则中的任意一条,因此我们不可能可靠地量化一个浮点值。

ROUND 函数用于把数值字段舍入为指定的小数位数。

SELECT ROUND(column_name,decimals) FROM table_name

Distinct的是作用是过滤结果集中的重复值。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多