SQL语句的学习

来源:互联网 发布:浙江堂鼓网络 编辑:程序博客网 时间:2024/04/29 06:02
一、个学习的是插入100万个用户的不同姓名的方法
declare @usercode bigintdeclare @userid intdeclare @meterid intdeclare @len intdeclare @i intDECLARE @LN VARCHAR(300),@MN VARCHAR(200),@FN VARCHAR(200)DECLARE @LN_N INT,@MN_N INT,@FN_N INTSET @LN='李王张刘陈杨黄赵周吴徐孙朱马胡郭林何高梁郑罗宋谢唐韩曹许邓萧冯曾程蔡彭潘袁于董余苏叶吕魏蒋田杜丁沈姜范江傅钟卢汪戴崔任陆廖姚方金邱夏谭韦贾邹石熊孟秦阎薛侯雷白龙段郝孔邵史毛常万顾赖武康贺严尹钱施牛洪龚'SET @MN='德绍宗邦裕傅家積善昌世贻维孝友继绪定呈祥大正启仕执必定仲元魁家生先泽远永盛在人为任伐风树秀文光谨潭棰'SET @FN='丽云峰磊亮宏红洪量良梁良粮靓七旗奇琪谋牟弭米密祢磊类蕾肋庆情清青兴幸星刑'SET @LN_N=LEN(@LN)SET @MN_N=LEN(@MN)SET @FN_N=LEN(@FN)DECLARE @TMP VARCHAR(1000)set @i=0set @len=1000000select @usercode=MAX(userno) from TB_USERselect @userid=MAX(USERID) from TB_USERselect @meterid=MAX(meterid) from TB_METERwhile(@i<@len)begin set @usercode=@usercode+1 set @userid=@userid+1 set @meterid=@meterid+1 SET @TMP=CAST(SUBSTRING(@LN,CAST(RAND()*@LN_N AS INT),1) AS VARCHAR) SET @TMP=@TMP+CAST(SUBSTRING(@MN,CAST(RAND()*@MN_N AS INT),1) AS VARCHAR) SET @TMP=@TMP+CAST(SUBSTRING(@FN,CAST(RAND()*@FN_N AS INT),1) AS VARCHAR)   Insert Into tb_user(userid,operatorid,accountid,khmoney,areacodeid,userno,username,usertel,usertel1,mobile,useraddr,userdate,userstate,count,differ,yearfeestate,checkstate,userbeizhu,namepinyin,addrpinyin,fireplaceid,firest,waterheaterid,waterst,f1id,f1st,f2id,f2st,f3id,f3st,appid) Values(@userid,'1','1','0.00','1',@usercode,@TMP,'','','','','2015-12-18 13:26:20','0','1','0','0','0','','_namepinyin','_addrpinyin','0','2015-12-18','0','2015-12-18','0','2015-12-18','0','2015-12-18','0','2015-12-18','1') Insert Into TB_METER(METERID,usertypeid,METERNO,caliber,dllcs,position,meterbase,meterbase1,State,saleid,writenumber,writedate,lastvalue, thisvalue, price, salewater, watermoney, receivable, paiclup, oldleftmoney,leftmoney,addprice,metertimes,metersumbuy,metersummoney,lastvalue1,thisvalue1) Values(@meterid,'1','','','0','1','0','0','0','0','0','2015-12-18 13:26:43','0','0','0','0','0','0','0','0','0','0','1','0','0','0','0') Insert Into tb_UserMeter(UserID,MeterId,IsUse) Values(@userid,@meterid,'0') set @i=@i+1endselect COUNT(1) from TB_USER
/*
  *在SQL Server中,CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。
  *语法:
  *CAST (expression AS data_type)
  *
  *参数说明:
  *expression:任何有效的SQServer表达式。
  *AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。
  *data_type:目标系统所提供的数据类型,包括bigint和sql_variant,不能使用用户定义的数据类型。
  */


/*
  *SELECT SUBSTRING(First Name,1,1) AS Initial, Last Name
  *FROM Employees
  *下面是结果集:
  *
  *Initial..........Last Name
  *-------------------------
  *A................Funk
  *M................Pearson
  *L................Calafato
  *N................Danner
  *J................Lee
  *S................Byham
  *M................Sutter
  *R................King
  */




/*
  *SUBSTRING ( expression, start, length )
  * 
  *  参数
  *
  *  expression
  *
  *  字符串、二进制字符串、文本、图像、列或包含列的表达式。请勿使用包含聚合函数的表达式。
  *
  *  start
  *
  *  整数或可以隐式转换为int 的表达式,指定子字符串的开始位置。
  *
  * length
  *
  * 整数或可以隐式转换为 int 的表达式,指定子字符串的长度(但是结果并补一个返回length字符长度,要看expression的长度和start的设置!!!!!!!!!!!)。
  *
  * 返回值
  *
  * 如果expression是一种支持的字符数据类型,则返回字符数据。如果 expression 是一种支持的二进制数据类型,则返回二进制数据。如果 start = 1,则子字符串从表达式的第一个字符开始
  *
  * 需要补充一句的是,开始start位置的设置,确实如果设置为1,会从第一个字符开始计数,2,3,4....以此类推。select substring(ziduan,1,6)将会选择字段的前6个字符,比如说是200908。
  *
  * 如果设置为0,同样的执行select substring(ziduan,0,6)结果会是20090,如果换成-1,同样执行select substring(ziduan,-1,6),结果会是2009。同样-2,-3,依次类推 substring('98765'  *   *-1,3)结果:9 。
  *
  *  substring('98765',0,3)结果:98
  * substring('98765',1,3)结果:987
  */




/*
  *调用rand函数可以产生随机数介于0和1之间的一个数

  */

第二个就是在表里如何将最近的记录号自动加一的方法就是

select @meterid=MAX(meterid) from TB_METER
二、对上述的每个数据添加记录

吃亏在记录没有初始化,对NULL值进行不断的加1还是NULL,下面一节描述错误

三、修改充值记录

碰到这样的问题,在添加充值记录里有一项是记录某个ID下充值记录的个数,

我在插入初始的100万条用户后,其记录个数都为空,然后我直接在空的基础上直接+1,这样因为没有初始化而直接加1 的结果是所有用户记录的个数都为空,

而我在不以为然的情况下对每个用户都插入了数个记录,但是记录数都为空。后来发现该错误。如何弥补成了困难。而且是对100万用户的弥补,在百度上提问也没有人回答

其模型是这样的

一个表,通过查询别的表的ID对应的ID的记录值,然后找到记录里最大值,最后修改最大值同一行的值的参数,语句怎么写

上图是通过在另外一个表A找到名为小明,对应ID为1234,找到对应表B里ID为1234的记录值共8条命令为

select * from B where USERID=(select USERID from A where name='小明')

,现在想找到B表的最大值修改meterID里的值,meterID的是这个记录的个数=8。

对于多个用户修改,怎么操作啊


跪求大神也是没有用,后来问里一个哥们,还是他比我聪明啊

declare @writenumber int,@i int
set @i=7
while @i<1000007
begin
select @writenumber=COUNT(*)from TB_SALE where USERID=(select USERID from TB_USER where USERNO=(220000000000+@i))
update TB_SALE set WRITENUMBER=@writenumber where saleid=( 
     select max(saleid) from TB_SALE where USERID=(
           select USERID from TB_USER where USERNO=(220000000000+@i)))
          set @i=@i+1
end

就这样解决了

0 0