SQL Server数据库学习之 -- 存储过程-游标-表值类型综合运用

来源:互联网 发布:设a是2n 1阶矩阵 编辑:程序博客网 时间:2024/06/13 08:14

      我在工作中,根据项目中的需求,需要编写存储过程,进行对数据批量处理。根据在项目中运用的知识点,我简写一个存储过程的内容,以另一个场景将所运用到的知识写下来:


USE [B2C2]  -- 使用B2C2数据库    SET ANSI_NULLS ON  GO  SET QUOTED_IDENTIFIER ON  GO  -- =============================================    /* 创建表值类型 clazz_Table */  CREATE TYPE clazz_Table AS TABLE  (      TEACHER varchar(128),     -- 班主任    CLANO   varchar(64),      -- 班级编号    SEX char(8),              -- 性别      NAME varchar(128),        -- 姓名      AGE int,                  -- 年龄    STUNO int                 -- 学号      )  GO      CREATE PROCEDURE [dbo].[proc_test01]  (      -- 设置全局变量      @re_table clazz_Table READONLY,      @D_COUNT INT OUTPUT   -- 输出参数  )     AS  BEGIN      -- 设置局部变量  DECLARE @D_TEACHER varchar(128);     -- 班主任    DECLARE @D_CLANO   varchar(64);      -- 班级编号    DECLARE @D_SEX char(8);              -- 性别      DECLARE @D_NAME varchar(128);        -- 姓名      DECLARE @D_AGE int;                  -- 年龄    DECLARE @D_STUNO int;                -- 学号            SET @D_COUNT = 0;  -- 初始设置值为0        -- 声明一个游标      DECLARE myCursor CURSOR FOR SELECT TEACHER, CLANO, SEX, NAME, AGE, STUNO FROM @re_table;        -- 打开游标      OPEN myCursor;      -- 从游标中读取数据赋值到声明的6个变量中      FETCH NEXT FROM myCursor INTO @D_TEACHER, @D_CLANO, @D_SEX, @D_NAME, @D_AGE, @D_STUNO;        -- 判断游标的状态        -- 0 fetch语句成功        -- 1 fecthc语句失败或此行不在结果中        -- 2 被提取的行不存在     WHILE(@@FETCH_STATUS = 0)   -- @@FETCH_STATUS为SQL Server数据库中内置的变量,可直接拿来使用。         BEGIN               -- 使用游标分条读取从Java代码端传递过来的clazz_Table数据         INSERT INTO t_clazz(teacher, clano, sex, name, age, stuno)             VALUES(@D_TEACHER, @D_CLANO, @D_SEX, @D_NAME, @D_AGE, @D_STUNO);               -- 用游标去取下一条记录           FETCH NEXT FROM myCursor INTO @D_TEACHER, @D_CLANO, @D_SEX, @D_NAME, @D_AGE, @D_STUNO;           END        -- 设置@D_COUNT的值    SET @D_COUNT = 1;       -- 关闭游标     CLOSE myCursor;     -- 撤销游标     DEALLOCATE myCursor;    END  GO





阅读全文
1 0