/*
* 存储过程:是一段经过预编译的SQL语句
*
* 优点:
* 1. 执行速度快
* 2. 共享程序逻辑
* 3. 减少网络流量
* 4. 作为一种安全机制
* 从存储过程中传回数据的方式
* 1. 结果集
* 2. 输出参数
* 3. 返回代码
* 4. 全局游标
*/
--创建存储过程
--无参
CREATE PROC up_getAllStudents
AS
SELECT * FROM Student;
GO
--带输入参数
ALTER PROC up_getStudentsByNo
@no INT = 0
AS
SELECT * FROM Student WHERE StudentNo=@no;
GO
CREATE PROC up_insertStudent
@no INT,
@password VARCHAR(20),
@name VARCHAR(20),
@gender BIT,
@gradeId INT,
@borndate DATETIME,
@phone VARCHAR(30)=NULL,
@address VARCHAR(50)='地址不详',
@email VARCHAR(30)=NULL,
@idenditycarc VARCHAR(18)=NULL
AS
INSERT INTO Student(StudentNo,LoginPwd,StudentName,Gender,GradeId,Phone,[Address],BornDate,Email,IdentityCard)
VALUES(@no,@password,@name,@gender,@gradeId,@phone,@address,@borndate,@email,@idenditycarc);
GO
--带输出参数
CREATE PROC up_getStudentNameByNo
@no INT,
@name VARCHAR(20) OUTPUT
AS
SELECT @name=StudentName FROM Student
WHERE StudentNo=@no;
GO
--返回代码
ALTER PROC up_getStudentNameByNo
@no INT,
@name VARCHAR(20) OUTPUT
AS
IF(NOT EXISTS(SELECT * FROM sysobjects WHERE name='Student'))
RETURN 1;
IF(NOT EXISTS(SELECT * FROM Student WHERE StudentNo=@no))
RETURN 2;
SELECT @name=StudentName FROM Student
WHERE StudentNo=@no;
IF(@@ERROR<>0)
RETURN 3;
RETURN 0;
GO
--调用存储过程
EXEC up_getAllStudents;
EXEC up_getStudentsByNo 13;
EXEC up_insertStudent 111,'123','abc',0,1,'1999-1-1';
DECLARE @stuName VARCHAR(20);
DECLARE @ret INT;
EXEC @ret = up_getStudentNameByNo -1,@stuName OUTPUT;
IF(@ret=1)
PRINT '表不存在';
ELSE IF(@ret=2)
PRINT '查无此人';
ELSE IF(@ret=3)
PRINT '查询出错';
ELSE IF(@ret=0)
PRINT '该学生的姓名为:' + @stuName;
* 存储过程:是一段经过预编译的SQL语句
*
* 优点:
* 1. 执行速度快
* 2. 共享程序逻辑
* 3. 减少网络流量
* 4. 作为一种安全机制
* 从存储过程中传回数据的方式
* 1. 结果集
* 2. 输出参数
* 3. 返回代码
* 4. 全局游标
*/
--创建存储过程
--无参
CREATE PROC up_getAllStudents
AS
SELECT * FROM Student;
GO
--带输入参数
ALTER PROC up_getStudentsByNo
@no INT = 0
AS
SELECT * FROM Student WHERE StudentNo=@no;
GO
CREATE PROC up_insertStudent
@no INT,
@password VARCHAR(20),
@name VARCHAR(20),
@gender BIT,
@gradeId INT,
@borndate DATETIME,
@phone VARCHAR(30)=NULL,
@address VARCHAR(50)='地址不详',
@email VARCHAR(30)=NULL,
@idenditycarc VARCHAR(18)=NULL
AS
INSERT INTO Student(StudentNo,LoginPwd,StudentName,Gender,GradeId,Phone,[Address],BornDate,Email,IdentityCard)
VALUES(@no,@password,@name,@gender,@gradeId,@phone,@address,@borndate,@email,@idenditycarc);
GO
--带输出参数
CREATE PROC up_getStudentNameByNo
@no INT,
@name VARCHAR(20) OUTPUT
AS
SELECT @name=StudentName FROM Student
WHERE StudentNo=@no;
GO
--返回代码
ALTER PROC up_getStudentNameByNo
@no INT,
@name VARCHAR(20) OUTPUT
AS
IF(NOT EXISTS(SELECT * FROM sysobjects WHERE name='Student'))
RETURN 1;
IF(NOT EXISTS(SELECT * FROM Student WHERE StudentNo=@no))
RETURN 2;
SELECT @name=StudentName FROM Student
WHERE StudentNo=@no;
IF(@@ERROR<>0)
RETURN 3;
RETURN 0;
GO
--调用存储过程
EXEC up_getAllStudents;
EXEC up_getStudentsByNo 13;
EXEC up_insertStudent 111,'123','abc',0,1,'1999-1-1';
DECLARE @stuName VARCHAR(20);
DECLARE @ret INT;
EXEC @ret = up_getStudentNameByNo -1,@stuName OUTPUT;
IF(@ret=1)
PRINT '表不存在';
ELSE IF(@ret=2)
PRINT '查无此人';
ELSE IF(@ret=3)
PRINT '查询出错';
ELSE IF(@ret=0)
PRINT '该学生的姓名为:' + @stuName;