1、带输入/输出参数的存储过程
创建一个存储过程proc_age,使其能够根据学生姓名,查询学生年龄。(考虑当学生不存在时给出提示信息)(已经创建了学生数据库,里面有学号、姓名、年龄、性别和专业等属性)
2、返回状态值的存储过程
(1)创建一个存储过程proc_status,使其能够根据学生姓名,查询学生的选课信息。
(如果没有输入学生姓名,返回状态码55;如果输入的学生姓名不存在,则返回状态码-155)(2)执行存储过程:接收存储过程返回的状态码,如果返回的状态码为55则输出提示信息“没有输入名字!!”;如果返回的状态码为-155,则输出“没找到!!”。(这里有另外的一个表:选课表,里面有学号、课程号和成绩等属性,学生表和上面的一样)

解决方案 »

  1.   

    CREATE TABLE 学生数据库
    (
    学号 NVARCHAR(10),
    姓名 NVARCHAR(50),
    年龄 INT,
    性别 BIT,
    专业 NVARCHAR(100)
    )
    INSERT INTO 学生数据库
    SELECT '001', '张三', 19, 1, '计算机应用'
    UNION ALL
    SELECT '002', '李凤', 18, 0, '英语'
    --#1
    CREATE PROCEDURE proc_age
    @姓名 NVARCHAR(50)
    AS
    BEGIN
    IF EXISTS(SELECT TOP 1 1 FROM 学生数据库 WHERE 姓名 = @姓名)
    SELECT 姓名, 年龄 FROM 学生数据库 WHERE 姓名 = @姓名
    ELSE
    SELECT [ERROR] = N'该学生信息不存在:' + @姓名
    ENDEXEC proc_age '张三'
    EXEC proc_age '测试'
    ----------------------------------------------------------
    CREATE TABLE 选课表
    (
    学号 NVARCHAR(10),
    课程号 NVARCHAR(10),
    成绩 INT
    )
    INSERT INTO 选课表
    SELECT '001', '历史', 95
    UNION ALL
    SELECT '002', '物理', 98
    --#2(1)
    CREATE PROCEDURE proc_status
    @姓名 NVARCHAR(50),
    @ErrorCode INT OUTPUT
    AS
    BEGIN
    IF @姓名 IS NULL OR @姓名 = ''
    SET @ErrorCode = 55
    ELSE IF EXISTS(SELECT TOP 1 1 FROM 学生数据库 A INNER JOIN 选课表 B ON A.学号 = B.学号 WHERE A.姓名 = @姓名)
    BEGIN
    SELECT A.学号, A.姓名, A.专业, B.课程号, B.成绩
    FROM 学生数据库 A
    INNER JOIN 选课表 B 
    ON A.学号 = B.学号
    WHERE A.姓名 = @姓名
    SET @ErrorCode = 0
    END
    ELSE
    SET @ErrorCode = -155
    END
    --#2(2)
    DECLARE @ErrorCode INT
    EXEC proc_status '张三', @ErrorCode OUTPUT
    --EXEC proc_status '', @ErrorCode OUTPUT
    --EXEC proc_status '测试', @ErrorCode OUTPUT
    IF @ErrorCode = 55
    SELECT [ERROR] = N'没有输入名字!'
    ELSE IF @ErrorCode = -155
    SELECT [ERROR] = N'没找到!'