CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

手机关联查询 ,真的搞不明白了

楼主hangdogj(中国人民是伟大的人民)(但是有很多刁民)2004-09-02 11:59:55 在 MS-SQL Server / 应用实例 提问

我现在需要实现与手机绑定的一个功能    
       
          有3个表  
          receive     其content字段存储手机短信查询成绩的信息,格式为         考号kaohao(空格)科目kemu  
          send           将查询结果插入到send表的content字段,信息会   发送    
          score         字段包括,编号(scoreId)、考号(kaohao)、姓名(uname)   科目(kemu)、成绩(score)  
   
   
   
        现在要将   receive表中的kaohao   kemu   分别提取出来,并作为条件,从score   表里搜索成绩(score)   姓名(uname),并按以下格式将内容插入send   表  
                                    uname,你的考号是kaohao,kemu成绩是score  
   
  要自动实现,就是说可以不需要人员查询  
  这个存储过程要怎么写啊      
  问题很难,希望高手   指点。  
   
         
   
  问题点数:60、回复次数:17Top

1 楼liuxiang_csdn(刘翔)回复于 2004-09-02 12:02:24 得分 0

1:  
  建议receive表中的kaohao和kemu   分两个字段  
  Top

2 楼hangdogj(中国人民是伟大的人民)(但是有很多刁民)回复于 2004-09-02 12:05:04 得分 0

很难      
  信息是从手机的一条短信接收的Top

3 楼wanyingsong(豌豆)回复于 2004-09-02 12:08:49 得分 0

自动实现的话,建议在表receive上建立一个触发器,在收到信息后,在查询后,把内容插入到send表Top

4 楼hisi(海山)(随机种子)回复于 2004-09-02 12:09:09 得分 10

--给receive表加个触发器,如下  
  create   trigger   tr_insert   on   receive   for   insert   as  
   
  declare   @content   varchar(140)  
  declare   @kaohao   varchar(21),   @kemu   varchar(21),   @t   int  
  select   @content   =   content,   @t   =   charindex(   ltrim(rtrim(content)),   '   '   )   from   inserted  
   
  set   @kaohao   =   left(@content,   @t   -   1)    
  set   @kemu   =   lrtrim(   substring(   @content,   @t,   len(@content)   -   @t   )   )    
   
  insert   into   send(   content   )   select   '你的考号是'   +   @kaohao   +   ','   +   @kemu   +   '成绩是   '   +   score   from   score   where   kaohao=@kaohao   and   kemu=@kemu  
   
  return   ;Top

5 楼haoK(haoK.Y)回复于 2004-09-02 12:11:37 得分 0

说说我的思路:  
   
  1。写2个函数,从receive表的content字段提取考号,科目  
  2。在receive表上建insert触发器  
  3。触发器中关联receive表和score表,取出相应信息填到send表  
  4。从send表取得待发信息,发送。用触发器或定时扫描都可  
  Top

6 楼hangdogj(中国人民是伟大的人民)(但是有很多刁民)回复于 2004-09-03 08:14:43 得分 0

请教一个问题,如果content字段包含着5种信息,中间都用空格分开,应该如何提取?Top

7 楼zjcxc(邹建)回复于 2004-09-03 08:37:45 得分 50

if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[f_split]')   and   xtype   in   (N'FN',   N'IF',   N'TF'))  
  drop   function   [dbo].[f_split]  
  GO  
   
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[序数表]')   and   OBJECTPROPERTY(id,   N'IsUserTable')   =   1)  
  drop   table   [序数表]  
  GO  
   
  --为了效率,所以要一个辅助表配合  
  select   top   8000   id=identity(int,1,1)   into   序数表    
  from   syscolumns   a,syscolumns   b  
  alter   table   序数表   add   constraint   pk_id_序数表   primary   key(id)  
  go  
   
  /*--字符串分函数  
   
  分拆指定分隔符的的字符串,返回结果表  
   
  --邹建   2004.04(引用请保留此信息)--*/  
   
  /*--调用示例  
   
  select   *   from   f_split('考号kaohao   科目kemu   学期xueqi','   ')  
  --*/  
  create   function   f_split(  
  @str   varchar(8000), --要分拆的字符串  
  @splitchar   varchar(10) --分隔符  
  )returns   table  
  as  
  return(  
  select   re=substring(@str,id,charindex(@splitchar,@str+@splitchar,id)-id)  
  from   序数表    
  where   id<=len(@str)+1   and   charindex(@splitchar,@splitchar+@str,id)-id=0  
  )  
  go  
   
   
  Top

8 楼zjcxc(邹建)回复于 2004-09-03 08:38:25 得分 0

创建上面的分拆处理函数,剩下的就是你自己调用这个分拆函数分拆信息,然后进行对应的处理了.Top

9 楼hangdogj(中国人民是伟大的人民)(但是有很多刁民)回复于 2004-09-03 08:55:46 得分 0

汗    
  虽然我早知道自己是井底之蛙,  
  就没想到竟然都看不懂别人的语句Top

10 楼hangdogj(中国人民是伟大的人民)(但是有很多刁民)回复于 2004-09-03 10:16:19 得分 0

信息是直接存到表里的,邹老大的例子似乎不能拆分字段阿    
  Top

11 楼zjcxc(邹建)回复于 2004-09-03 10:35:28 得分 0

当然是叫你把字段中的值读出来分拆啦.Top

12 楼hangdogj(中国人民是伟大的人民)(但是有很多刁民)回复于 2004-09-03 11:00:21 得分 0

可是我用     set   @str=select   content   from   receive     提示有语法错误Top

13 楼zjcxc(邹建)回复于 2004-09-03 11:05:52 得分 0

看来你的sql水平是比较差了  
   
  select   @str=content   from   receive  
   
  --或:  
  set   @str=(select   top   1   content   from   receive)Top

14 楼hangdogj(中国人民是伟大的人民)(但是有很多刁民)回复于 2004-09-03 12:57:24 得分 0

何止是差  
  这不重要,关键我对这东西没什么兴趣  
  总要   干完这个,有始有终吧Top

15 楼hangdogj(中国人民是伟大的人民)(但是有很多刁民)回复于 2004-09-04 09:16:43 得分 0

多谢了!  
  能否写个完整的拆分字段、将拆分后的每一行作为搜索条件,从另一表(score)中提取数据,插入到send表   中的代码  
   
  麻烦邹老大了Top

16 楼hangdogj(中国人民是伟大的人民)(但是有很多刁民)回复于 2004-09-06 08:47:55 得分 0

表结构是这样的    
  receive表  
  id       SpCode             UserCode         MsgId               ReceiveTime     SendTime       content                 Mobile                               SmsFlag    
  3           16009           55852                     2541                 2004-08-36         2004-08-38           125   语文   数学             13000000000       12      
   
  score表  
  id                     kaohao                                 kemu                                     score                
  -----------   ---------------------   ---------------------   -----------    
  1                       123                                       语文                                         85  
  2                       125                                       语文                                         89  
  3                       125                                       数学                                         95  
  kaosheng表  
  id                     kaohao                             uname               province                                                
  -----------   ---------------------   ----------   -----------------------------  
  1                       125                                       小郑                   山东  
  2                       123                                       小刘                   河北  
  3                       128                                       小张                   河北  
   
  send表跟receive结构是一样的  
   
  将receive表的content   拆分,125     语文     数学   分别作为条件查询score,并关联score和kaosheng   ,查询其名字,在send表的content字段填入  
        uname,你的成绩为   语文   89     数学95  
  (receive   表的mobile     照原样插入send表的   mobile)Top

17 楼zjcxc(邹建)回复于 2004-09-06 21:53:20 得分 0

--超小型  
   
  --示例数据  
  create   table   receive(id   int,SpCode   int,UserCode   int,MsgId   int  
  ,ReceiveTime   datetime,SendTime   datetime  
  ,content   varchar(8000),Mobile   varchar(20),SmsFlag   int)  
  insert   receive   select   3,16009,55852,2541  
  ,'2004-08-06','2004-08-08'  
  ,'125   语文   数学','13000000000',12      
   
  create   table   Send(id   int,SpCode   int,UserCode   int,MsgId   int  
  ,ReceiveTime   datetime,SendTime   datetime  
  ,content   varchar(8000),Mobile   varchar(20),SmsFlag   int)  
   
  create   table   score(id   int,kaohao   int,kemu   varchar(10),score   int)  
  insert   score   select   1,123,'语文',85  
  union     all       select   2,125,'语文',89  
  union     all       select   3,125,'数学',95  
   
  create   table   kaosheng(id   int,kaohao   int,uname   varchar(10),province   varchar(10))  
  insert   kaosheng   select   1,125,'小郑','山东'  
  union     all             select   2,123,'小刘','河北'  
  union     all             select   3,128,'小张','河北'  
  go  
   
  --创建处理函数  
  create   function   f_content(  
  @content   varchar(8000)  
  )returns   varchar(8000)  
  as  
  begin  
  declare   @kaohao   varchar(20),@re   varchar(8000)  
  select   @re=uname+',你的成绩为:'  
  ,@kaohao=left(@content,charindex('   ',@content)-1)  
  ,@content=','+replace(stuff(@content,1,charindex('   ',@content),''),'   ',',')+','  
  from   kaosheng  
  where   kaohao=left(@content,charindex('   ',@content)-1)  
  select   @re=@re+'   '+kemu+'   '+cast(score   as   varchar)  
  from   score  
  where   kaohao=@kaohao  
  and   charindex(','+kemu+',',@content)>0  
  return(@re)  
  end  
  go  
   
  --调用函数实现处理  
  insert   send  
  select   id,SpCode,UserCode,MsgId,ReceiveTime,SendTime  
  ,dbo.f_content(content),Mobile,SmsFlag  
  from   receive  
   
  --显示处理结果  
  select   *   from   send  
  go  
   
  --删除测试  
  drop   table   receive,Send,score,kaosheng  
  drop   function   f_content  
   
  /*--测试结果(自己看)--*/Top

相关问题

  • 如何查询关联表?
  • 两个表关联查询
  • 一张表关联查询??!!
  • 关联查询的问题
  • mysql关联查询一问:
  • 关联查询问题。
  • 复杂关联查询??
  • DataTable关联查询问题
  • 关联表查询问题
  • 主题 !!!关联与条件查询??? (It's all)

关键词

  • 字段
  • 函数
  • 科目
  • 查询
  • 手机
  • 信息
  • kaohao
  • kemu
  • 序数
  • 触发器

得分解答快速导航

  • 帖主:hangdogj
  • hisi
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo