当前位置: 首页 > 编程日记 > 正文

格式化测试数据,组装用于插入表中的sql语句

最近闲的蛋疼,每每在写测试例子的时候,万恶的测试数据需要手工书写insert语句的向表中插入,很费事,于是就像写个脚本来实现自动生成插入语句

测试数据:

100 北京 20120203123
100 天津20120203123
101 湖南20120203null
101 海南20120203123
102 上海20120203123
102 云南20120203123
需要把这些数据插入到某张表中,如果您使用书写insert into(......)values(,,,,)需要用逗号隔开,还需要加单引号,确实挺麻烦的于是乎就写了个脚本,根据表空间的每个字段类型自动组装插入sql语句,下面采用的是insert into tb select a,b,c union all select xxxx的方式
我的思路是列与列之间用逗号隔开,行与行之间用分号隔开(呵呵,其实这样的话其实也省不了多少时间)
采用了2层while循环,先循环每一行,对每一行每一列的数据进行判断数据类型,是否需要加单引号,这个可以通过操作字符串的一些函数来实现
对已经循环过的数据进行剔除,继续对剩余的字符串继续循环拼装sql
写完之后突然感觉写的好麻烦,就一个拼装进行插入的sql语句,至于写的那么麻烦吗,但是没有别的思路了,抛砖引玉,希望哪位大神指点一下

脚本如下:

/*
=====================Author:  lordbabyDatetime:  2012-5-18
Description:  convert  test data to insert sql
=====================
*/
IF  OBJECT_ID('tb') IS NOT NULL DROP TABLE tb
CREATE TABLE TB(col1 INT,col2 VARCHAR(20),col3 datetime,col4 numeric(12,2))DECLARE @testData NVARCHAR(max)
DECLARE @sqlStr NVARCHAR(max)
DECLARE @rowCount INT
DECLARE @colCount INT
DECLARE @i INT
DECLARE @j INT 
DECLARE @data_type VARCHAR(10)
DECLARE @rowData VARCHAR(100)
DECLARE @colData VARCHAR(100)
SELECT @sqlStr='select '
---稍微加工一下测试数据
--列与列之间用逗号隔开,行与行之间用分号隔开
SELECT @testData=
'100 , 北京,20120203,123;
100 ,天津,20120203,123;
101  ,湖南,20120203,null; 
101 ,海南,20120203,123;
102      , 上海,20120203,123;
102 ,云南,20120203,123;' --请输入需要几行测试数据
SELECT @rowCount=6
--需要几列测试数据
SELECT @colCount= count(1) from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='tb'
SELECT @i=1
SELECT @j=1WHILE @i<=@rowCount
BEGINSELECT @rowData=''--截取每一行的数据IF CHARINDEX(';',@testData)>0BEGINSELECT @rowData=@rowData+LTRIM(SUBSTRING(@testData,1,CHARINDEX(';',@testData)-1))SELECT @testData=LTRIM(SUBSTRING(@testData,CHARINDEX(';',@testData)+1,LEN(@testData)-LEN(@rowData)+1))--PRINT @testDataENDELSEBEGINBREAKENDSELECT @j=1WHILE @j<=@colCountBEGINSELECT @colData=''SELECT @data_type=DATA_TYPEFROM (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS num,COLUMN_NAME,DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='tb') AS t WHERE num=@jIF (@data_type='int' OR @data_type='numeric' OR @data_type='decimal')BEGIN--截取某行每一列的值IF CHARINDEX(',',@rowData)>0BEGINSELECT @colData=SUBSTRING(@rowData,1,CHARINDEX(',',@rowData)-1)SELECT @sqlStr=@sqlStr+' '+@colData+' '+','SELECT @rowData=LTRIM(SUBSTRING(@rowData,CHARINDEX(',',@rowData)+1,LEN(@rowData)-LEN(@colData)+1))ENDELSEBEGINSELECT @colData=@rowDataSELECT @sqlStr=@sqlStr+' '+@colData+' union all  select'END ENDIF (@data_type='varchar' OR @data_type='nvarchar' OR @data_type='datetime')BEGINIF CHARINDEX(',',@rowData)>0BEGINSELECT @colData=SUBSTRING(@rowData,1,CHARINDEX(',',@rowData)-1)SELECT @sqlStr=@sqlStr+CASE WHEN UPPER(LTRIM(RTRIM(@colData)))='NULL' THEN 'null'+','ELSE ' '+''''+@colData+''''+' '+',' ENDSELECT @rowData=LTRIM(SUBSTRING(@rowData,CHARINDEX(',',@rowData)+1,LEN(@rowData)-LEN(@colData)+1))ENDELSEBEGINSELECT @colData=@rowDataSELECT @sqlStr=@sqlStr+CASE WHEN UPPER(LTRIM(RTRIM(@colData)))='NULL' THEN 'null'ELSE ' '+''''+@colData+''''+' ' END+' union all   select 'ENDENDSELECT @j=@j+1ENDSELECT @i=@i+1
END PRINT  left(@sqlStr,len(@sqlStr)-len('union all   select'))
--这里采用的是 inser into tb select xxxx union all select cxxxx....
/*
insert into tb
select  100  , '北京' , '20120203' , 123 union all  select 
100  , '天津' , '20120203' , 123 union all  select 
101   , '湖南' , '20120203' , 123 union all  select 
101  , '海南' , '20120203' , 123 union all  select 
102       , '上海' , '20120203' , 123 union all  select 
102  , '云南' , '20120203' , 123
*/
select * from tb
/*
col1        col2                 col3                    col4
----------- -------------------- ----------------------- --------------
100         北京                   2012-02-03 00:00:00.000 123.00
100         天津                   2012-02-03 00:00:00.000 123.00
101         湖南                   2012-02-03 00:00:00.000 123.00
101         海南                   2012-02-03 00:00:00.000 123.00
102         上海                   2012-02-03 00:00:00.000 123.00
102         云南                   2012-02-03 00:00:00.000 123.00(6 行受影响)*/



转载于:https://www.cnblogs.com/hailiang2013/archive/2012/05/18/2846425.html

相关文章:

linux内核功能有,好消息!LINUX内核2.6.18终于支持实时功能了

LINUX内核2.6.18终于支持实时功能了,这是个好消息。当LINUX实时功能加强后&#xff0c;它在嵌入式系统的应用就会更广泛了。在这一版发布前&#xff0c;为了使嵌入式系统的LINUX具有实时特性&#xff0c;需要给标准和LINUX系统加上具有实时功能的补丁。实际上&#xff0c;就算是…

Asp.Net 构架(HttpModule 介绍)

Http 请求处理流程 和 Http Handler 介绍 这两篇文章里&#xff0c;我们首先了解了Http请求在服务器端的处理流程&#xff0c;随后我们知道Http请求最终会由实现了IHttpHandler接口的类进行处理(应该记得Page类实现了IHttpHandler)。从 Http 请求处理流程 一文的最后的一幅图中…

.net下WinDbg使用说明

加载调试文件 .loadby sos mscorwks #.Net 3.5版本及以下 .loadby sos clr #.Net 4.0 WinDbg的基本命令 !threads #显示所有线程 !dumpheap #显示托管堆的信息 !dumpheap -stat #统计堆栈内存 !clrstack #显示调用栈 !dumpobj #显示一个对象的内容 !dumparray #显示数组…

【系列】EOS开发3 EOS提供的程序和工具

上一篇文章使用了nodeos命令来启动eos服务&#xff0c;这一篇文章&#xff0c;就来介绍一下eos提供的相关程序和工具。 nodeos EOSIO的核心守护进程&#xff0c;它可通过插件配置来启动一个节点。 cleos 这是一个命令行工具&#xff0c;它跟nodeos开放的REST API接口进行交互。…

Linux qgis 编译,QGIS简介与源代码编译

QGIS(http://qgis.org)是一个集成了很多个开源的空间数据处理库的桌面GIS软件&#xff0c;支持Python脚本。QGIS基于QT和SIP进行开发&#xff0c;支持Windows\Linux\MacOS等操作系统&#xff0c;可以访问MySQL/PostGRE等数据库的空间数据&#xff0c;可以连接到OpenstreetMap拉…

一步步写自己SqlHelper类库(五):Command对象

1.Command对象基础 当我们使用Connection对象里面的方法打开数据库后&#xff0c;要查询自己所需的数据或对数据库的内容进行增删改时&#xff0c;Command对象就派上用场了&#xff01; MSDN定义&#xff1a;建立与数据源的连接后&#xff0c;利用Command对象来执行命令并从数据…

MVC-前台调用后台action 传递upload file 参数问题

在后台获取upload file 数量的时候发现count一直为0&#xff0c;经检查发现了问题 &#xff0c;代码如下&#xff1a; 前台&#xff1a; var data $("#DetailForm").serialize(); $.ajax({ url: Url.Action("SaveRequest", "RegistrationRequest&quo…

Storybook 5.0正式发布:有史以来变化最大的版本\n

Storybook 5.0&#xff08;SB5&#xff09;于近日正式发布&#xff0c;这是目前为止最大的一个版本。新版本的内容包括&#xff1a; 全新的开发者体验&#xff1b;带有主题的组件库&#xff1b;改进的前端插件架构&#xff1b;全新的Storybook网站。 Storybook的进展和未来 Sto…

linux6直连存储挂载磁盘,CentOS7mount网络磁盘的详细步骤

在配置前一定先关闭防火墙systemctl disable firewalldsystemctl stop firewalldsystemctl mask firewalld一.修改iscsi客户端的用户名vi /etc/iscsi/initiatorname.iscsiInitiatorName iqn.************&#xff1b;【注&#xff1a;eg&#xff1a;iqn.2017-09.com.centos:cl…

如何将Java源代码文件的编码从GBK转为UTF-8?

有时候看到有意思的demo&#xff0c;在头痛导入项目的编码和workspace的编码不一样的时候 我试着将 笔记本打开一个类一个类的复制&#xff0c; demo的类比较少的时候 可以忍受&#xff0c;demo的类多的时候 除了靠之外 别无办法 今天再找仿ios样式demo的时候 实在受不了乱码&a…

电子书格式怎么在线转换为PDF格式

电子书格式怎么在线转换为PDF格式&#xff0c;现在很多朋友喜欢用PDF格式的电子书&#xff0c;因为其有纸质书的排版和格局&#xff0c;但实际生活中出现的最多的是TXT等格式的电子书&#xff0c;那如何将其进行转换成PDF格式的呢&#xff0c;下面就由小编来告诉大家转换的解决…

设计模式笔记(18)---迭代器模式(行为型)

Gof定义 提供一种方法顺序访问一个聚合对象中的各个元素&#xff0c; 而又不暴露该对象的内部表示。 动机 在软件构建过程中&#xff0c;集合对象内部结构常常变化各异。但对于这些集合对象&#xff0c;我们希望在不暴露其内部结构的同时&#xff0c;可以让外部客户代码透明地访…

linux卸载mpfr,Red Hat Linux在安装gcc时遇到的问题汇总

找到了一个比较老的RedHatlinux&#xff0c;想要装上apachetomcat。由于是在虚拟机中运行&#xff0c;我想先装一个vmware-tools提高性能。但是安装的过程中我发现竟然找不到gcc。于是我就去网上(] http://www.linuxidc.com/Linux/2009-01/18242.htm 与 http://www.linuxidc.co…

【数据结构】某些难理解点

1 typedef char ListData;2 //表示以后可以用ListData来代替char类型3 4 typedef struct node{ //此处node&#xff0c;只在结构体中出现和使用5 ListData data;6 struct node *link;7 }ListNode; //表示将整个结构体命名为ListNode&#xff0c;也就是说…

利用jQuery实现用户名片小动画

我爱撸码&#xff0c;撸码使我感到快乐&#xff01;大家好&#xff0c;我是Counter。下面给大家介绍利用jQuery实现的小动画&#xff0c;非常的简便&#xff0c;如果有原生js操作的话&#xff0c;那么就不止这么多行了。至于CSS&#xff0c;个人觉得&#xff0c;这边CSS布局也蛮…

Linux二进制导出配置文件,Go打包二进制文件的实现

背景众所周知&#xff0c;go语言可打包成目标平台二进制文件是其一大优势&#xff0c;如此go项目在服务器不需要配置go环境和依赖就可跑起来。操作需求&#xff1a;打包部署到centos7笔者打包环境&#xff1a;mac os方法&#xff1a;进入main.go所在目录&#xff0c;输入如下命…

crud springmvc

实体类&#xff1a;Student.java Java代码 package demo.entity; public class Student { private int id; private String name; private String sex; private String address; public int getId() { r…

从 Flutter 的视频渲染到 App 落地经验

3月23日周六&#xff0c;由 RTC 开发者社区主办的 “RTC Dev Meetup 北京站”如约举行&#xff0c;超过100位求知若渴的开发者参加了活动。来自 LeanCloud、声网 Agora、阿里、美团点评的资深工程师&#xff0c;与他们共同分享了 Flutter 开发中的实践经验。 我们在这里回顾一下…

screen命令

原文链接 screen其实就是linux虚拟终端&#xff0c;你可以用它创建很多虚拟终端&#xff0c;每个终端可以创建1~10个窗口&#xff0c;每个窗口相当于一个linux shell窗口&#xff0c;可以执行的操作和正常shell完全一样。 【终端操作】 &#xff08;需要在物理shell中操作&a…

linux 565显示格式,RGB565转BMP格式 C语言程序

#include#include#include#include"rgb2bmp.h"int RGB2BMP(char *,int ,int ,FILE *);int main(int argc,char *argv[]){double num_tmp 0;FILE *p;/*************** input data ***********filename :RGB数据文件名称nWidth :所生成文件的水平像素n…

Spring Boot @ConfigurationProperties使用指导

1.简介 Spring Boot的一个非常有用的功能是外部化配置&#xff0c;并且可以轻松访问属性文件中定义的属性。 我们现在将详细地探索ConfigurationProperties注释。 2.设置 本文使用相当标准的设置。我们首先在我们的pom.xml中添加spring-boot-starter-parent作为父项&#xff1a…

UVA 10494 - If We Were a Child Again(高精度除法和取余)

题目链接&#xff1a;http://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&pageshow_problem&problem1435 这个题做的好没状态。上几天刷的高精度都白刷了啊。。。首先代码除法和取余以前都做过&#xff0c;还要查看以前的代码&#xff0c;模板还…

python显示当前时间

import time time.strftime("%Y%m%d %X", time.localtime()) #当前时区 time.strftime("%Y%m%d %X", time.gmtime(time.time()))#0时区 下面是format字符串的解释&#xff1a; strftime(format[, tuple]) -> string 将指定的struct_time(默认为当前时间…

linux系统 插优盘安装xvidcap,linux下的视频录制软件xvidcap

1.xvidcap简介在linux如果我们想要进行视频录制&#xff0c;那么xvidcap是一个不错的选择。Xvidcap 是一个可将屏幕上的操作过程录制下来并保存为视频的小工具。对于需要制作产品演示和教学的朋友来说&#xff0c;这个屏幕录像机十分实用。Xvidcap 支持生成 avi、mpeg、asf、fl…

ASP.NET Cookie

最经在使用Cookie的过程中遇到了一些疑问&#xff0c;查阅参考MSDN&#xff0c;记录Cookie相关知识点 什么是Cookie Cookie是一小段文本信息&#xff0c;伴随着用于的请求和页面在Web服务器和浏览器之间传递,并将它存储在用户硬盘上的某个文件夹中。Cookie包含每次用户访问站点…

1111 评论

201406114205 陈嘉慧 http://www.cnblogs.com/hui1005039632/ 201406114219 林宇粲 http://www.cnblogs.com/zlcan/ 201406114220 蔡舜 http://www.cnblogs.com/caishun/ 201406114215 林志杰 http://www.cnblogs.com/15linzhijie/ 201406114252 王俊杰 http://www.cnblogs.c…

React 16.8.6 发布,构建用户界面的 JavaScript 库

React 16.8.6 已发布&#xff0c;该版本更新如下&#xff1a; React DOM 修复 useReducer() 中的问题&#xff08;acdlite in #15124&#xff09;修复 Safari DevTools 中的 iframe 警告&#xff08;renanvalentin in #15099&#xff09;若 contextType 设置为 Context.Consume…

linux禁止路由器,FCC 新规可能禁止在 WiFi 路由器安装 OpenWRT

FCC(美国联邦通讯委员会)的新规则可能会禁止在 WiFi 路由器安装 OpenWRT。OpenWrt 类似于 Buildroot 的路由器固件&#xff0c;为嵌入式设备所研发的 Linux 发行版。目前 OpenWrt 已支持多个平台(如 ARM、mips、x86 等)&#xff0c;且提供了许多开源应用程序&#xff01;许多便…

智销功能_Shiro权限框架

Shiro是什么&#xff1f; Spring security 重量级安全框架 Apache shiro 轻量级安全框架 Shiro是一个强大且易用的Java权限框架 四大基石 身份验证&#xff0c;授权&#xff0c;密码学&#xff0c;会话管理 /*** String algorithmName, Object source, Object salt, int hashIt…

ARM、FPGA和DSP的特点和区别是什么?(转)

发布时间&#xff1a;2009-5-8 14:25 发布者&#xff1a;ARM 关键词&#xff1a;DSP, ARM, FPGA, 特点 DSP&#xff08;digital singnal processor&#xff09;是一种独特的微处理器&#xff0c;有自己的完整指令系统&#xff0c;是以数字信号来处理大量信息的器件。一个…