存储过程

我是.net菜鸟。

写存储过程之前应该先判断数据库里是否有此存储过程,有就删掉。

IF EXISTS (SELECT * FROM dbo.sysobjects where id = object_id(N'ProcedureName') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE ProcedureName
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

上面两段语句只是为了使sqlserver遵从 SQL-92 规则。

接下来可以写一段注解,描述一下这个存储过程是为了干什么,是谁写的,什么时候写的等等。这个只是为了想以后的人解释一下而已,也可以不写。

现在开始正式创建一个存储过程。

CREATE PROCEDURE ProcedureName
    @parameter1 INT,
    @parameter2 varchar(25) READONLY,
    @parameter3 varchar(25) READONLY
AS
BEGIN

上面写的是创建一个存储过程, 存储过程的名字是ProcedureName,有三个参数。

其实存储过程就像是我们一个自定义的方法,存储过程里的参数就像是调用方法时所传递的参数,只是自定义的方法是用来对代码进行操作,而存储过程是对数据库进行操作而已。

接下来要写的就是你对数据库的操作了,是查询一些数据,还是删除一些数据等等。

最后加上

END

GO

整个存储过程就结束了。

我随便写一个例子。

IF EXISTS (SELECT * FROM dbo.sysobjects where id = object_id('GetAdminName') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE GetAdminNameGO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

/*
<storedproc name="GetAdminName" version = "1.00">

<summary> This proc is used to get Admin name</summary>

<returns type="INT">
</returns>

<histories>
 <history author="某某某" date="02/18/2013">
  Original Creation 
 </history>   
</histories>

<example>

</example>

<remarks>

</remarks>

<implementation/>
<signature/>
*/

CREATE PROCEDURE GetAdminName
    @Admin_Id INT   

AS
BEGIN

-- User

SELECT name

FROM

USER

WHERE AdminId=Admin_Id

END

GO

上面是一个非常简单的存储过程。好了。

 

 

下面来说一说Merge

MERGE BookBorrowList AS TARGET
USING Student AS SOURCE
 ON (TARGET.StudentId= SOURCE.StudentId)
WHEN MATCHED THEN
 UPDATE SET
  TARGET.bookStaus='Borrowed' 

WHEN NOT MATCHED BY TARGET THEN
 INSERT (
   .......)

 VALUES (
 ......) 

posted @ 2013-04-01 16:42  qiny  阅读(160)  评论(0编辑  收藏  举报