SQLServer存储过程编程经验技巧
目前,SQL Server正日益成为Windownt操作系统上最重要的数据库管理系统。随着SQL Server 2000的推出,微软的这种数据库服务系统真正做到了Windows NT/2000系列操作系统一统天下的局面。微软操作系统上的任何数据库系统都无法与之抗衡,包括数据库领域的领头羊甲骨文公司的看家数据库系统Oracle。不可否认,SQL Server的缺陷在于它只能运行在微软自己的操作系统上,这是SQL Server的致命伤。但另一方面,它也成为了推动者,促使SQL Server在其唯一的“土地”上把功能发挥到极致,充分发挥NT系列操作系统的各种潜力!存储过程作为SQL Server数据库系统中一个非常重要的概念,可以有效地提高程序的性能。而且,将业务逻辑封装在数据库系统的存储过程中,可以大大提高整个软件系统的可维护性。当您的业务逻辑发生变化时,不再需要修改和编译客户端应用程序并将其重新分发给大量用户。你只需要在服务器端修改存储的流程,就可以实现相应的业务逻辑。合理的编写自己需要的存储过程,可以有限的利用SQL Server的各种资源。下面我们来看看编写SQL Server存储过程和使用存储过程的各种技巧和经验!
我们下面讨论的前提是你有一些编写SQL Server存储过程的经验。除非另有说明,否则以下技术适用于SQL Server 7.0和SQL Server 2000。
1.使用输出类型参数存储过程的技巧
一般情况下,存储过程直接向调用者返回一个记录集,但有时我们只需要一些存储过程返回的一些参数的值。这时,我们可以指定存储过程的输出参数,例如:
创建过程GetName
@uid nvarchar(1),
@usernam nvarchar(10)= ' '输出
如同
set @username= '洪超'
去
在上面的存储过程中,我们传入的参数是@ uid,而参数@ username在调整时不需要传入。这样,存储过程将返回给我们参数@ username的值是'洪超'。以上都比较容易。需要注意的是,在SQL 2000中的时候,如果你的存储过程只有一个参数,并且这个参数是输出类型的,那么在调用这个存储过程的时候一定要给这个参数一个初始值,否则会出现调用错误!
2.储存过程中的注意事项
这个在SQL Server 7.0和SQL Server 2000之间有些地方是不一样的,也不知道
是不是微软的疏漏,就是有些系统的关键字在不同版本之间是不一样的,比如关键字级别,同一句话:
select * from level = 1的用户
在SQL Server 7中运行存储过程没有问题,但是在SQL Server 2000中会出现运行错误。原因是“level”在SQL Server 2000中作为关键字使用(奇怪的是,在SQL 7中也是关键字,但没问题),所以在SQL 2000中,上面的语句应该改为:
select * from users其中[level]=1
从上面的例子我们可以看到,当你写一个存储过程的时候,在有可能使用系统关键字的地方用“[”和“]”把它围起来,这样可以避免移植过程中出现运行错误。
3.在存储过程中使用系统存储过程SP _ EXECUTE SQL的注意事项
我们自己写存储过程的时候,很多时候会用到系统的存储过程sp _ execute。但是,需要注意的是,如果在这个存储过程(通常是一个SQL语句)的参数中操作一个临时表,这个临时表对调用者是不可见的,这意味着不能通过这个临时表在调用者和被调用者之间传递值。解决方法是使用全局临时表,即以“# #”开头的表。
4.在存储过程中使用临时表和游标的注意事项
如果我们的业务逻辑比较复杂,在存储过程中需要一些介质作为转盘,然后临时表J就会发挥作用,但是请记得在使用完临时表之后立即删除使用过的临时表。
在存储过程中,依次遍历记录集的方法是使用系统游标。还有,需要注意的是,使用完成后,要及时关闭并销毁光标对象,释放他所使用的资源。而且不到万不得已不要使用游标,因为这样会占用更多的系统资源,尤其是在大并发的情况下,很容易使系统资源耗尽而崩溃。
使用临时表和临时游标各有利弊,在使用过程中要适当利用!
位律师回复
0条评论