创建测试表,批量插入数据的存储过程,分页存储过程

翻译 2016年08月30日 16:00:06
<!--创建测试表,批量插入数据的存储过程,分页存储过程-- >
--创建测试数据库表
-------------------------------------------------------------------
CREATE TABLE [UserList]
    (
      [id] INT PRIMARY KEY
               IDENTITY(1, 1) ,
      [userName] NVARCHAR(50) ,
      [passWord] NVARCHAR(255) ,
      [userRealName] NVARCHAR(50) ,
      [userTel] NVARCHAR(50) ,
      [userState] INT ,
      [userMail] NVARCHAR(50) ,
      [userLastLogin] DATETIME ,
      [userPost] NVARCHAR(50) ,
      [AddTime] DATETIME
    )
GO
-------------------------------------------------------------------
--批量插入测试用户数据信息
-------------------------------------------------------------------
DECLARE @i INT
SET @i = 1
WHILE @i <= 100 
    BEGIN
        INSERT  INTO [UserList]
                ( [userName] ,
                  [passWord] ,
                  [userRealName] ,
                  [userTel] ,
                  [userState] ,
                  [userMail] ,
                  [userLastLogin] ,
                  [userPost] ,
                  [AddTime]
                )
        VALUES
                ( @i ,
                  '123456' ,
                  'liangjw' + CONVERT(NVARCHAR(20), @i) ,
                  '15527808832' + CONVERT(NVARCHAR(20), @i) ,
                  '0' ,
                  'liangjw0504@163.com' ,
                  GETDATE() ,
                  '超级管理员' ,
                  GETDATE()
                )
        SET @i = @i + 1
    END


GO
------------------------------------------------------------------
--创建分页存储过程
-------------------------------------------------------------------
CREATE PROC [dbo].[sp_PageView]
    @tbname SYSNAME ,               --要分页显示的表名   
    @FieldKey NVARCHAR(1000) ,      --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段   
    @PageCurrent INT = 1 ,               --要显示的页码   
    @PageSize INT = 10 ,                --每页的大小(记录数)   
    @FieldShow NVARCHAR(1000) = '' ,      --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段   
    @FieldOrder NVARCHAR(1000) = '' ,      --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC   用于指定排序顺序   
    @Where NVARCHAR(1000) = '' ,     --查询条件   
    @RecordCount INT OUTPUT             --总页数   
AS 
    DECLARE @PageCount AS INT
    SET NOCOUNT ON   
--检查对象是否有效   
    IF OBJECT_ID(@tbname) IS NULL 
        BEGIN   
            RAISERROR(N'对象"%s"不存在',1,16,@tbname)   
            RETURN   
        END   
    IF OBJECTPROPERTY(OBJECT_ID(@tbname), N'IsTable') = 0
        AND OBJECTPROPERTY(OBJECT_ID(@tbname), N'IsView') = 0
        AND OBJECTPROPERTY(OBJECT_ID(@tbname), N'IsTableFunction') = 0 
        BEGIN   
            RAISERROR(N'"%s"不是表、视图或者表值函数',1,16,@tbname)   
            RETURN   
        END   
   
--分页字段检查   
    IF ISNULL(@FieldKey, N'') = '' 
        BEGIN   
            RAISERROR(N'分页处理需要主键(或者惟一键)',1,16)   
            RETURN   
        END   
   
--其他参数检查及规范   
    IF ISNULL(@PageCurrent, 0) < 1 
        SET @PageCurrent = 1   
    IF ISNULL(@PageSize, 0) < 1 
        SET @PageSize = 10   
    IF ISNULL(@FieldShow, N'') = N'' 
        SET @FieldShow = N'*'   
    IF ISNULL(@FieldOrder, N'') = N'' 
        SET @FieldOrder = N''   
    ELSE 
        SET @FieldOrder = N'ORDER BY ' + LTRIM(@FieldOrder)   
    IF ISNULL(@Where, N'') = N'' 
        SET @Where = N''   
    ELSE 
        SET @Where = N'WHERE (' + @Where + N')'   
   
--如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)   
    IF @PageCount IS NULL 
        BEGIN   
            DECLARE @sql NVARCHAR(4000)   
            SET @sql = N'SELECT @RecordCount=COUNT(*)' + N' FROM ' + @tbname
                + N' ' + @Where   
            EXEC sp_executesql 
                @sql ,
                N'@RecordCount int OUTPUT' ,
                @RecordCount OUTPUT   


            SET @PageCount = ( @RecordCount + @PageSize - 1 ) / @PageSize   
        END   
   
--计算分页显示的TOPN值   
    DECLARE
        @TopN VARCHAR(20) ,
        @TopN1 VARCHAR(20)   
    SELECT
        @TopN = @PageSize ,
        @TopN1 = ( @PageCurrent - 1 ) * @PageSize   
   
--第一页直接显示   
    IF @PageCurrent = 1 
        EXEC(N'SELECT TOP '+@TopN   
        +N' '+@FieldShow   
        +N' FROM '+@tbname   
        +N' '+@Where   
        +N' '+@FieldOrder)   
    ELSE 
        BEGIN   
    --处理别名   
            IF @FieldShow = N'*' 
                SET @FieldShow = N'a.*'   
   
    --生成主键(惟一键)处理条件   
            DECLARE
                @Where1 NVARCHAR(4000) ,
                @Where2 NVARCHAR(4000) ,
                @s NVARCHAR(1000) ,
                @Field SYSNAME   
            SELECT
                @Where1 = N'' ,
                @Where2 = N'' ,
                @s = @FieldKey   
            WHILE CHARINDEX(N',', @s) > 0 
                SELECT
                    @Field = LEFT(@s, CHARINDEX(N',', @s) - 1) ,
                    @s = STUFF(@s, 1, CHARINDEX(N',', @s), N'') ,
                    @Where1 = @Where1 + N' AND a.' + @Field + N'=b.' + @Field ,
                    @Where2 = @Where2 + N' AND b.' + @Field + N' IS NULL' ,
                    @Where = REPLACE(@Where, @Field, N'a.' + @Field) ,
                    @FieldOrder = REPLACE(@FieldOrder, @Field, N'a.' + @Field) ,
                    @FieldShow = REPLACE(@FieldShow, @Field, N'a.' + @Field)   
            SELECT
     --@Where=REPLACE(@Where,@s,N'a.'+@s),   
                @FieldOrder = REPLACE(@FieldOrder, @s, N'a.' + @s) ,
                @FieldShow = REPLACE(@FieldShow, @s, N'a.' + @s) ,
                @Where1 = STUFF(@Where1 + N' AND a.' + @s + N'=b.' + @s, 1, 5,
                                N'') ,
                @Where2 = CASE WHEN @Where = '' THEN N'WHERE ('
                               ELSE @Where + N' AND ('
                          END + N'b.' + @s + N' IS NULL' + @Where2 + N')'   
    --执行查询 
  
            EXEC(N'SELECT TOP '+@TopN   
            +N' '+@FieldShow   
            +N' FROM '+@tbname   
            +N' a LEFT JOIN(SELECT TOP '+@TopN1   
            +N' '+@FieldKey   
            +N' FROM '+@tbname   
            +N' a '+@Where   
            +N' '+@FieldOrder   
            +N')b ON '+@Where1   
            +N' '+@Where2   
            +N' '+@FieldOrder)   
        END  

mysql 创建测试大表

#创建表DEPT CREATE TABLE dept( /*部门表*/ deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, dname VARC...
  • qq_24949727
  • qq_24949727
  • 2016年03月08日 14:52
  • 492

java mysql分页查询大量数据,批量插入

//mysql连接 rewriteBatchedStatements=true打开批量写入 public static Connection getConn() throws SQLExcepti...
  • baidu_16217779
  • baidu_16217779
  • 2017年05月05日 17:32
  • 364

MySQL基础教程11-Mysql删除数据表操作

前面介绍了数据表的修改操作,这里补上数据表的删除操作,和前面数据库的删除操作一样,删除一个数据表是有危险的行为,一旦执行了删除语句,会把表内的字段和内容都给删除。 1.删除前有以下表(没有自己根据前...
  • u011541946
  • u011541946
  • 2017年12月18日 22:30
  • 87

hive建表以及测试

内部表建表(manaaged_table)内部表定义1、由create table命令直接创建,没有加入关键字的表 2、内部表默认存储/user/hive/warehouse下,也可以由locati...
  • huoyuyan
  • huoyuyan
  • 2016年03月03日 23:33
  • 1250

hive的表的创建及测试

hive创建表的三种方式 第一种:普通方式创建语句create table if not exists student( num int, name string ) row format delim...
  • haoyuexihuai
  • haoyuexihuai
  • 2016年11月22日 20:10
  • 753

批量生成sql语句批量插入数据库

一点偷懒的小片段,保存一份 遇到添加几百个几乎相同的数据(名字和序号不一样) 根据文本文件data.txt内的数据(以行区分条) 生成批量插入语句到in.sql 然后用查询分析器执行。 //起...
  • yukon12345
  • yukon12345
  • 2015年05月04日 15:30
  • 2256

Python操作MongoDB 新建不同的collection 批量插入数据库

Python操作MongoDB  新建不同的collection 批量插入数据库 不多说, 看代码: import pymongo import json con = pymo...
  • wangming520liwei
  • wangming520liwei
  • 2017年02月24日 09:56
  • 1457

MYSQL用存储过程创建百万级测试数据表

mysql用存储过程创建百万级测试数据
  • www520507
  • www520507
  • 2017年03月24日 16:35
  • 1031

我的.Net学习之路六——快速的批量插入数据

一、介绍在我们客户端录入数据的时候,有可能会向数据库一次性大量的录入数据,这时我们常规的添加数据的办法就行不通了,虽然很少遇到,但还是不得不防。二、举例1、首先,我们在数据库建立一张简单的表。注:这里...
  • u010368562
  • u010368562
  • 2015年04月26日 23:49
  • 1299

使用JDBC在MySQL数据库中快速批量插入数据

使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(10W+),如何提高效率呢? 在JDBC编程接口中Statement 有两个方法特别值得注意: void addBatc...
  • whucyl
  • whucyl
  • 2014年03月09日 12:44
  • 34005
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:创建测试表,批量插入数据的存储过程,分页存储过程
举报原因:
原因补充:

(最多只允许输入30个字)