2023年6月21日发(作者:)

数据库存储过程的是指就是部署在数据库端的一组定义代码以及SQL

存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。

优点:

1 安全机制:

只给用户访问存储过程的权限,而不授予用户访问表和视图的权限

2 改良了执行功能:

只有在第一次执行时进行编译,以后执行无需重新编译,而一般SQL语句每执行一次就编译一次

3 减少网络流量:

存储过程存在于服务器上,调用时,只需传递执行存储过程的执行命令和返回结果。

4 模块化的程序设计:增强了代码的可重用性,提高了开发效率

创建存储过程时注意事项

1 只能在当前数据库中创建存储过程。

2 数据库的所有者可以创建存储过程,也可以授权其他用户创建存储过程

3 存储过程时数据库对象,其名称必须遵守标识符命名规则。

4 创建存储过程时,应指定所有输入参数和向调用过程或批处理返回的输出参数、执行数据库操作的编程语句和返回至调用过程或批处理以表明成功或失败的状态值。

语法:

CREATE PROC[EDURE] procedure_name [;number]

[

{@parameter data_type} ][VARYING] [= default] [OUTPUT]

]

[,...n]

[WITH

{

RECOMPILE

| ENCRYPTION

| RECOMPILE, ENCRYPTION

}

]

[FOR REPLICATION]

AS

sql_statement [...n]

例:

存储过程

Create procedure select_test

As

Select * from test order by id desc

在中调用

SqlConnection con=new SqlConnection(“server=localhost;database=test;uid=sa;pwd=123456”); ();

SqlCommand cmd=new(“select_test”,con);

dType=Procedure;

SqlDataReader dr=eReader();

例2

带参数的存储过程

Create procedure test_query

@password int

As

Select name from test where password=@password

Order by name desc

在中调用

SqlDataAdapter da=new SqlDataAdaper(“test_query”,con);

para0=new SqlParameter(“@password”,pwd);

(para0);

Command CommandType=Procedure;

使用output

Use demo

go

CREATE proc test1

@para int output

as

select @para=avg(age) from Demo

go

declare @par int

exec test1 @par output

print '平均年龄为:'+str(@par)

使用return语句(返回值)

USE shop

GO

CREATE PROC up_jiagepj

AS

declare @pjjiage float

SELECT @pjjiage=AVG(价格) FROM 商品表

return @pjjiage

GO

使用return语句(返回值)

USE shop

GO

DECLARE @pj float

EXECUTE @pj =up_jiagepj PRINT ‘所有商品的平均价格为:’+STR(@pj)

GO

触发器

触发器时一种特殊类型的存储过程,不由用户直接调用,而且可以包含复杂的SQL语句,它们主要用于强制复杂的业务规则或要求。触发器还有助于强制引用完整性,以便在添加、更新或删除表中的行时保留表之间已定义的关系。可以完成存储过程能完成的功能。

特点:

1 与表紧密相连,可以看做表定义的一部分;

2 它不能通过名称直接调用,更不允许带参数,而是当用户对表中的数据进行修改时,自动执行;

3 它可以用于SQL Server约束、默认值和规则的完整性检查,实施更为复杂的数据完整性约束。

优点:

1 触发器自动执行

在对表的数据做了任何修改之后立即被激活。

2 能够对数据库中的相关表实现级联更改

触发器时基于一个表创建的,但是可以针对多个表进行操作,实现数据库中相关表的级联更改。

3 可以实现比check约束更为复杂的数据完整性约束

4 触发器可以评估数据修改前后的表状态,并根据其差异采取对策。

5 一个表中可以存在多个同类触发器(INSERT、UPDATE或DELETE),对与同一个修改语句可以有多个不同的对则以响应。

种类:

1 AFTER触发器 后触发器,该类触发器是在引起触发器执行的修改语句成功完成之后执行。如果修改语句因错误(如违反约束或语法错误)而失败,触发器将不会执行。此类触发器只能定义在表上,不能创建在视图上。可以为每个触发操作创建多个AFTER触发器。

2 INSTEAD OF触发器 替代触发器,当引起触发器执行的修改语句停止修改时,该类触发器代替触发操作执行。该类触发器既可在表上定义,也可在视图上定义。对于每个触发操作只能定义一个INSTEAD OF触发器

2023年6月21日发(作者:)

数据库存储过程的是指就是部署在数据库端的一组定义代码以及SQL

存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。

优点:

1 安全机制:

只给用户访问存储过程的权限,而不授予用户访问表和视图的权限

2 改良了执行功能:

只有在第一次执行时进行编译,以后执行无需重新编译,而一般SQL语句每执行一次就编译一次

3 减少网络流量:

存储过程存在于服务器上,调用时,只需传递执行存储过程的执行命令和返回结果。

4 模块化的程序设计:增强了代码的可重用性,提高了开发效率

创建存储过程时注意事项

1 只能在当前数据库中创建存储过程。

2 数据库的所有者可以创建存储过程,也可以授权其他用户创建存储过程

3 存储过程时数据库对象,其名称必须遵守标识符命名规则。

4 创建存储过程时,应指定所有输入参数和向调用过程或批处理返回的输出参数、执行数据库操作的编程语句和返回至调用过程或批处理以表明成功或失败的状态值。

语法:

CREATE PROC[EDURE] procedure_name [;number]

[

{@parameter data_type} ][VARYING] [= default] [OUTPUT]

]

[,...n]

[WITH

{

RECOMPILE

| ENCRYPTION

| RECOMPILE, ENCRYPTION

}

]

[FOR REPLICATION]

AS

sql_statement [...n]

例:

存储过程

Create procedure select_test

As

Select * from test order by id desc

在中调用

SqlConnection con=new SqlConnection(“server=localhost;database=test;uid=sa;pwd=123456”); ();

SqlCommand cmd=new(“select_test”,con);

dType=Procedure;

SqlDataReader dr=eReader();

例2

带参数的存储过程

Create procedure test_query

@password int

As

Select name from test where password=@password

Order by name desc

在中调用

SqlDataAdapter da=new SqlDataAdaper(“test_query”,con);

para0=new SqlParameter(“@password”,pwd);

(para0);

Command CommandType=Procedure;

使用output

Use demo

go

CREATE proc test1

@para int output

as

select @para=avg(age) from Demo

go

declare @par int

exec test1 @par output

print '平均年龄为:'+str(@par)

使用return语句(返回值)

USE shop

GO

CREATE PROC up_jiagepj

AS

declare @pjjiage float

SELECT @pjjiage=AVG(价格) FROM 商品表

return @pjjiage

GO

使用return语句(返回值)

USE shop

GO

DECLARE @pj float

EXECUTE @pj =up_jiagepj PRINT ‘所有商品的平均价格为:’+STR(@pj)

GO

触发器

触发器时一种特殊类型的存储过程,不由用户直接调用,而且可以包含复杂的SQL语句,它们主要用于强制复杂的业务规则或要求。触发器还有助于强制引用完整性,以便在添加、更新或删除表中的行时保留表之间已定义的关系。可以完成存储过程能完成的功能。

特点:

1 与表紧密相连,可以看做表定义的一部分;

2 它不能通过名称直接调用,更不允许带参数,而是当用户对表中的数据进行修改时,自动执行;

3 它可以用于SQL Server约束、默认值和规则的完整性检查,实施更为复杂的数据完整性约束。

优点:

1 触发器自动执行

在对表的数据做了任何修改之后立即被激活。

2 能够对数据库中的相关表实现级联更改

触发器时基于一个表创建的,但是可以针对多个表进行操作,实现数据库中相关表的级联更改。

3 可以实现比check约束更为复杂的数据完整性约束

4 触发器可以评估数据修改前后的表状态,并根据其差异采取对策。

5 一个表中可以存在多个同类触发器(INSERT、UPDATE或DELETE),对与同一个修改语句可以有多个不同的对则以响应。

种类:

1 AFTER触发器 后触发器,该类触发器是在引起触发器执行的修改语句成功完成之后执行。如果修改语句因错误(如违反约束或语法错误)而失败,触发器将不会执行。此类触发器只能定义在表上,不能创建在视图上。可以为每个触发操作创建多个AFTER触发器。

2 INSTEAD OF触发器 替代触发器,当引起触发器执行的修改语句停止修改时,该类触发器代替触发操作执行。该类触发器既可在表上定义,也可在视图上定义。对于每个触发操作只能定义一个INSTEAD OF触发器