存储过程
我是.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 (
......)