是利用数据库所提供的扩展-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建存储过程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)