手机关联查询 ,真的搞不明白了
我现在需要实现与手机绑定的一个功能
有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




