`

关于存储过程

阅读更多

 

删除存储过程

Drop Procedure 存储过程名

 

创建一个简单的有添加作用的存储过程

CREATE PROCEDURE ProInsertStu    存储过程名

@Name nvarchar(20),     存储过程中的参数前要加@后要加类型,多个参数之间用逗号隔开,这些参数就是要付给(直接执行或其他应用程序调用)该存储过程的值

@Age smallint

AS                AS后面跟SQL语句,声明变量,给变量赋值,给参数赋值等

insert into student ([Name],Age) values (@Name,@Age);

执行存储过程

exec ProInsertStu '李刚',32

 

创建一个简单的有修改作用的存储过程

CREATE PROCEDURE ProUpdateStu 

@Name nvarchar(20),

@Age smallint,

@ID int    最后一个参数不用加逗号

AS

update student set [Name]=@Name,Age=@Age where ID=@ID; 

执行存储过程

exec ProUpdateStu '王刚',34,1

 

IF...ELSE IF...

CREATE PROCEDURE ProIFELSE

@Name nvarchar(20)   只有一个参数,后不用加逗号

AS

IF @Name='黄刚'

BEGIN

insert into student ([Name],Age) values ('黄刚',35);  SQL语句后要加分号

END

ELSE IF @Name='基冈'

BEGIN

insert into student ([Name],Age) values ('曼联',36);

END

ELSE IF @Name='桂刚'

BEGIN

update student set [Name]=@Name where [Name]='曼联';

END

 

声明变量及给变量赋值

CREATE PROCEDURE ProVariable 

@Name nvarchar(20)

AS                  在AS后声明及赋值变量

declare @TheAge smallint     声明变量关键字declare且变量前要加@后要加类型

set @TheAge=51    赋值变量关键字set且前要加@     声明与赋值变量后都不用加逗号

if @TheAge>40

begin

print '年龄不允许大于40'

end

else if @TheAge<40

begin

insert into student ([name],age) values (@Name,@TheAge);

end

 

 

CREATE PROCEDURE ProVariable2 

@Name nvarchar(20),

@Age int OUTPUT        这种output参数能返回其值

AS

declare @TheAge smallint

set @TheAge=(select Age from student where Name=@Name)  可以通过SQL的select语句给变量赋值

set @Age=(select Age from student where Name=@Name)  可以通过SQL的select语句给参数赋值

if @TheAge>40

begin

print '年龄不允许大于40'

end

else if @TheAge<40

begin

set @TheAge=@TheAge+1

insert into student ([name],age) values ('黑刚',@TheAge);

end

 

WHILE

CREATE PROCEDURE ProWhile 

@Name nvarchar(20)

AS

declare @TheAge smallint

set @TheAge=(select Age from student where Name=@Name)

while @TheAge>8

begin

set @TheAge=@TheAge-1

end

insert into student ([Name],Age) values (@Name,@TheAge);

 

CASE...WHEN...THEN...(ELSE)...END    这里没有写在存储过程里

SELECT

当查age字段时根据age字段的值的不同进行不同的操作,但then,else后面的数据类型要与age字段的数据类型相同

当age大于34时将其减1再显示(但数据库里的值并没有改,只是显示的是这样)...age=33时...其他的按正常显示

 

select [name],age=case when age>34 then age-1 when age=33 then age+1 else age end from student

当name字段的值为王刚时按正常显示,其余的在name字段的值前加一个'我叫'

select [name]=case when [name]='王刚' then [name] else '我叫'+[name] end,age from student

then后面跟的就是满足条件的字段的值(如果直接写字段名就是正常显示),这时只能操作值如+-等,不能用= 赋值,但可以直接将要赋的值写上,如查到name字段的值为王刚时,不让其显示,直接写null

 

select [name]=case when [name]='王刚' then null else '我叫'+[name] end,age from student

UPDATE

将年龄小于36岁的年龄改成35岁,其余的年龄加8,这次可是真改了

update student set age=case when age<36 then 35 else age+8 end
这里如果不加else,或when没有涉及到的情况,这些记录的值将被设置为null(如果字段可空)或默认值(如果字段不可空)

OUTPUT参数返回值与Return返回值
被定义为OUTPUT的参数可以向使用该存储过程的应用程序返回其值
Return int or '123'  Return返回值只能是整型或整型形式的字符串,且只能返回一个值
CREATE PROCEDURE 
@name nvarchar(10),
@id int output
AS
select * from commanager where name=@name;
--set @id=4 直接给参数赋死值
set @id=(select commanagerid from commanager where name=@name) 用select方式动态给参数赋值
return @id   这里@id是int类型,所以可以用return形式返回
--return @@rowcount    返回受影响的记录数
--return @@identity       返回最后一次插入的记录的标识号
USE AdventureWorks2008R2;
GO
UPDATE HumanResources.Employee 
SET JobTitle = N'Executive'
WHERE NationalIDNumber = 123456789
IF @@ROWCOUNT = 0
PRINT 'Warning: No rows were updated';
GO
@@***为SQLServer内置的全局变量,可根据具体情况选择是直接使用还是作为返回值返回

 

http://qsfwy.iteye.com/blog/251256|荐

http://www.cnblogs.com/junyistar/archive/2007/07/13/817315.html

http://www.cnblogs.com/junyistar/archive/2007/06/07/775296.html

http://www.cnblogs.com/chenxizhang/archive/2009/03/19/1416217.html(输出参数)

http://www.cnblogs.com/Nina-piaoye/archive/2006/09/18/507183.html

http://www.cppblog.com/Lee7/archive/2008/06/19/53962.html

http://www.cnblogs.com/hongyin163/archive/2008/10/27/1320389.html(Case)

http://kb.cnblogs.com/page/106721/

分享到:
评论

相关推荐

    数据库实验报告-存储过程、触发器

    【存储过程】 存储过程是数据库中一组预编译的SQL语句,它可以接收参数,执行特定任务,并返回结果。其优点包括: 1. 提高性能:存储过程在首次编译后,会缓存执行计划,多次调用时无需再次解析,从而提高执行速度。...

    实验六:创建存储过程和触发器1

    以下是关于存储过程和触发器的详细解释: 1. **存储过程的功能特点**: - **复用性**:存储过程可以被多次调用,减少了重复编写SQL语句的工作。 - **安全性**:可以通过权限控制限制对存储过程的访问,保护数据库...

    关于存储过程的资料,对存储过程不了解的有所帮助

    存储过程是数据库管理系统中预编译的SQL语句集合,它们是数据库中的可重用程序模块,主要用于执行复杂的数据库操作。存储过程在数据库设计和开发中扮演着重要角色,能够提高应用程序的性能、安全性和可维护性。下面...

    有关于存储过程的相关资料

    ### 存储过程相关知识点详解 #### 一、存储过程简介 存储过程是一种预编译的SQL代码集合,存储在数据库服务器上,并可被应用程序调用执行。它们提供了多种优势,包括性能提升(通过减少网络流量和利用预编译代码)...

    存储过程(讲解很细致)

    这个压缩包中的"stored_procedure_tutorial.txt"文件很可能包含了关于存储过程的详细教程,包括它们的工作原理、创建、执行以及优势等。 存储过程的主要优点包括性能提升、代码重用、增强安全性、减少网络流量以及...

    存储过程的命名规范及命名方法

    以下是一些关于存储过程命名的重要原则和方法: 一、命名规范 1. **清晰明了**:存储过程的名称应该直接反映其功能或作用,避免使用模糊不清的名称。例如,如果一个存储过程负责插入用户数据,可以命名为`Insert...

    oracle存储过程函数生成DEMO

    综上所述,"Oracle存储过程函数生成DEMO"涵盖了Oracle数据库中关于存储过程和函数的基本概念、创建方法、调用方式以及可能涉及到的数据操作。通过学习和实践这个DEMO,开发者可以更好地理解和掌握如何在实际项目中...

    数据库的存储过程

    数据库的存储过程是数据库管理系统提供的一种预编译的SQL语句集合,它是数据库中的一个对象,可以被多次调用,从而提高数据访问的效率。在本文中,我们将深入探讨存储过程的基本理念、语法以及常见的实现方式,特别...

    掌握SQL Server存储过程的命名标准

    这提供了关于存储过程作用范围的快速视觉提示。 3. **可选字段名**: 当存储过程根据某个特定字段进行筛选时,可以在表名之后加入该字段名。例如,如果存储过程按`CoName`或`ClientID`筛选,可以命名为`...

    oracle存储过程解锁

    在IT领域,尤其是在数据库管理与优化中,存储过程的解锁是一项关键技能,尤其对于Oracle数据库而言。当存储过程被锁定时,可能会影响系统的性能和稳定性,因此掌握如何解锁存储过程至关重要。以下是对“oracle存储...

    SQL存储过程试题及答案

    今天,我们将讨论三道关于SQL存储过程的试题,这些试题涵盖了存储过程的创建、调用和参数传递等方面。 1. 创建分数存储过程 首先,让我们创建一个存储过程,用于计算某门课程的最高分、最低分和平均分。这个存储...

    pb调用存储过程

    以下是关于Pb调用存储过程以及存储过程创建的详细知识: 首先,`Pb调用存储过程`通常是通过Database窗口或者DataWindow对象来实现的。在Pb中,我们可以通过以下步骤调用存储过程: 1. **声明存储过程**:在Pb的...

    oracle存储过程学习经典入门

    关于 Oracle 存储过程的若干问题备忘 在学习 Oracle 存储过程时,需要了解一些常见问题的解决方法。例如,在 Oracle 中,数据表别名不能加 as。在存储过程中,select 某一字段时,后面必须紧跟 into,如果 select ...

    SAP HANA 中调试存储过程

    SAP HANA是一个高性能的内存数据库系统,它提供了一系列功能强大的工具来进行数据分析、应用开发、存储过程编写等操作。其中,对于存储过程的调试是开发者日常开发工作中的一个重要环节,SAP HANA为存储过程提供了...

    SqlServer存储过程及调试指南

    1. 存储过程概念:存储过程是一组为完成特定功能的SQL语句集,这些语句经过编译后存储在数据库中,供用户通过指定存储过程名和参数(如有)来执行。存储过程被称作数据库中的重要对象,对于设计良好的数据库应用程序...

    关于PostGreSQL中的存储过程

    PostgreSQL 存储过程详解 PostgreSQL 是一个开源的数据库管理系统,它提供了强大的数据存储和管理功能。其中,存储过程是一个非常重要的概念,本文将对 PostgreSQL 中的存储过程进行详细的介绍和解释。 什么是存储...

    mysql存储过程教程

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列SQL语句并封装成一个可重复使用的单元,从而提高数据处理的效率和代码的复用性。本教程将深入探讨MySQL存储过程的创建、调用以及相关概念...

    实验七存储过程与触发器.pdf

    下面是关于存储过程和触发器的知识点: 一、创建存储过程 创建存储过程需要使用CREATE PROCEDURE语句,例如: ```sql CREATE PROCEDURE proc_1 AS BEGIN SELECT * FROM 学生表; END; ``` 上面的存储过程名为proc_...

    存储过程扩展学习

    在SQL Server中,存储过程分为不同种类,包括用户定义的存储过程、系统存储过程、临时存储过程以及扩展存储过程。 1. **用户定义的存储过程**:由开发人员或DBA创建,可以根据业务需求定制各种复杂操作,如数据处理...

Global site tag (gtag.js) - Google Analytics