什么是存储过程,access里可以弄存储过程吗

什么是存储过程,access里可以弄存储过程吗,第1张

存储过程是一组为了完成特定功能的SQL语句集。

是利用数据库所提供的扩展-SQL语言所编写的程序。

经编译后存储在数据库。

例如

SQL Server 有 T-SQL 写的存储过程

Oracle 有 PL/SQL 写的存储过程

DB2、MySQL 等, 都有自己的存储过程。

至于 Access,也可以写一些在 Access 里面执行的 VBA 代码。

在 Access 里面, 好像名字叫做 “宏”, 不叫做 “存储过程”。

存储过程: 固化在SQL数据库系统内部的SQL语句,这样做的好处是可以提高效率、体改数据库的安全性、减少网络流量。

1打开SQL Server数据库,展开 “数据库”系欸但,找到使用的数据库(目标数据库),展开该数据库节点,找到 “可编程性” 节点并展开,就可以看到 “存储过程”,在 “存储过程”上点击右键,新建存储过程,然后会d出查询分析器,在这输入创建代码就可以

create proc myinsert -- 创建一个存储过程,名称为myinsert

--这里写参数,如果有的话;没有的话就空着

as

--这里写具体语句,可以写N个

go--可加可不加,go的意思是另起一页,相当于下一个功能块。如果下边不写语句,可以不加!

View Code

代码实例

create proc myinsert@Name varchar(50)as insert into Student(Name)values(@Name)go

View Code

上面代码段的存储过程,可以向 Student表中插入一行数据。最后执行代码就能在 “存储过程”下保存次代码段,名为“myinsert”

上面提到的方法是手动创建一个存储过程的方法,还有另外一种方法,直接在 “新建查询”,打开查询分析器,然后在上边的语句中加入一句话:"use DataBaseName ” ,DataBaseName就是使用的数据库的名字,也就是在这个数据库中建立存储过程

例如:在Test数据库中,对Class表插入一行数据

use Testgocreate proc myclass    @Name varchar(30)as

insert into Class(Name)values(@Name)go

View Code

存储过程中也可以做 if 判断

USE [Test]GO/ Object:  StoredProcedure [dbo][myclass]    Script Date: 10/30/2017 4:30:22 PM /SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER proc [dbo][myclass]

@Name varchar(30),    @SName varchar(50)as

if    @Name!=null

begin

insert into Class(Name)values(@Name)        return

end

if    @SName!=null

begin

insert into Student(Name)values(@SName)    end

View Code

2如何在C# 中调用存储过程

using System;using SystemCollectionsGeneric;using SystemData;using SystemDataSqlClient;using SystemLinq;using SystemText;using SystemThreadingTasks;namespace Stored_Procedures

{    class Program

{        static void Main(string[] args)

{            string strsql = "Data Source=hw-zhi-02;Initial Catalog=Test;Integrated Security=True";//数据库链接字符串

string sql = "myclass";//要调用的存储过程名

SqlConnection conStr = new SqlConnection(strsql);//SQL数据库连接对象,以数据库链接字符串为参数

SqlCommand comStr = new SqlCommand(sql, conStr);//SQL语句执行对象,第一个参数是要执行的语句,第二个是数据库连接对象

comStrCommandType = CommandTypeStoredProcedure;//因为要使用的是存储过程,所以设置执行类型为存储过程

//依次设定存储过程的参数

comStrParametersAdd("@Name", SqlDbTypeText)Value = "";

comStrParametersAdd("@SName", SqlDbTypeText)Value = "Test";

conStrOpen();//打开数据库连接

//  MessageBoxShow(comStrExecuteNonQuery()ToString());//执行存储过程

SqlDataAdapter SqlDataAdapter1 = new SqlDataAdapter(comStr);

DataTable DT = new DataTable();

SqlDataAdapter1Fill(DT);

conStrClose();//关闭连接          }

}

}

View Code

最后跑程序,可以在对应数据库中找到添加的数据

首先我们需要创建一个测试数据库,为了简单,我们在这个数据库中只创建一个Student表和一个Major表其表结构和关系如下所示

看看怎样用PowerDesigner快速的创建出这个数据库吧

1现在开始使用PowerDesigner创建数据库,首先运行程序,进入主界面:

2File—New Model—Physical Data Model—Physical Diagram—Model name 设置为test,DBMS属性设置为Microsoft SQL Server 2005:

3首先用表格工具创建一个表格模板:

4双击表格模板,设置属性,我们首先设置Major表:

5设置好表名,点击Columns标签,设置字段属性,设置如图所示:

6因为MajorID字段我们要设置为自动增长,所以要设置它的高级属性,选择MajorID字段,点击属性按钮,在General面板中勾选上Identity复选框:

7确定后我们再创建一个Student表,字段设置如图所示:

8接着是为Student创建一个MajorID外键,使用PowerDesigner可以很轻松的完成这个工作,选择关系设置工具,在Student表上按住左键不放,拖拽至Major表,便可为Student表添加一个MajorID的外键:

9哈哈,现在测试表已经设置好了,接着设置一下我们要生成的数据库吧,这些表都将被创建到该数据库中,我们在设计面板空白处右键—Properties,在d出的属性设置对话框设置如下:

10好了,在此我们对新数据库的设置已经完成,但是在SQL中还是空空如也啊,我们要怎么把这边设计好的结构移植到SQLServer 2005中呢执行 *** 作:Database—Generate Database,设置好存储过程导出目录和文件名,点击确定即可:

11到你的导出目录,就可以看见导出的数据库创建存储过程了,打开SQL,执行一下,你就会看到数据库被神奇的创建好了:

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。

存储过程通常有以下优点:

存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。

存储过程能实现较快的执行速度。如果某一 *** 作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。

存储过程能过减少网络流量。针对同一个数据库对象的 *** 作(如查询、修改),如果这一 *** 作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。

存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。

MySQL存储过程创建的格式如下:

CREATE PROCEDURE 过程名 ([过程参数[,]])

[特性 ] 过程体

举例代码如下:

CREATE PROCEDURE proc1(OUT s int)  

BEGIN 

    SELECT COUNT() INTO s FROM user;  

END

存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。

过程体的开始与结束使用BEGIN与END进行标识。

注意:MySQL在50以前并不支持存储过程

有存储过程的向导

打开sql的企业管理器,定位到你要建立存储过程的数据库.在工具菜单里单击”向导”,打开”选择向导”对话框.在注册服务向导中单击”数据库”

在打开的列表中有”创建存储过程的向导”

你只要按提示 *** 作就可以了

(1)执行速度快。

存储过程创建是就已经通过语法检查和性能优化,在执行时无需每次编译。

存储在数据库服务器,性能高。

(2)允许模块化设计。

只需创建存储过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次。存储过程可由在数据库编程方面有专长的人员创建,并可独立于程序源代码而单独修改 。

(3)提高系统安全性。

可将存储过程作为用户存取数据的管道。可以限制用户对数据表的存取权限,建立特定的存储过程供用户使用,完成对数据的访问。

create

procedure

update_table

(

@c_tbname

varchar(128),

--

要更新的表名

@c_upcolname

varchar(1000),

--

要更新的字段列表,以豆号隔开

@c_updata

varchar(1000),

--

要更新的数据列表,以豆号隔开,要与相应的列一一对应

@c_id

varchar(100)

--

要更新的关键字,没有关键字的不能更新

)

as

begin

declare

@c_sql

varchar(max)

declare

@i_bcol

int

declare

@i_ecol

int

declare

@i_bdata

int

declare

@i_edata

int

if

@c_id

is

null

or

@c_id

=

''

return

set

@i_bcol=

1

set

@i_bdata=

1

set

@c_sql

=

'

update

'

+

@c_tbname

+

'

set

'

set

@i_ecol

=

charindex(','

,

@c_upcolname

,

@i_bcol

)

while

@i_ecol

>

0

begin

set

@c_sql

=

@c_sql

+

substring(

@c_upcolname,@i_bcol,@i_ecol

-

1

)

+

'

=

'

set

@i_edata=

charindex(','

,

@c_updata,

@i_bdata)

set

@c_sql

=

@c_sql

+

''''

+

substring(

@c_updata,@i_bdata,@i_edata-

1

)

+

'''

,'

set

@i_bcol

=

@i_ecol

+

1

set

@i_ecol

=

charindex(','

,

@c_upcolname

,

@i_bcol

)

end

set

@c_sql

=

@c_sql

+

substring(

@c_upcolname,@i_bcol,len@c_upcolname)

-

1

)

+

'

=

'

set

@c_sql

=

@c_sql

+

''''

+

substring(

@c_updata,@i_bdata,len(@c_updata)-

1

)

+

'''

'

set

@c_sql

=

@c_sql

+

'

where

id

=

'''

+

@c_id

+

'''

'

exec

(

@c_sql

)

end

以上就是关于什么是存储过程,access里可以弄存储过程吗全部的内容,包括:什么是存储过程,access里可以弄存储过程吗、C#代码如何创建存储过程、怎么用powerDesigner建存储过程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9833487.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存