各位高手帮忙看一下,在线等待!!!

purpleshell 2003-05-22 09:42:46
以下是我所写的存储过程,不知为什么得到的数据是重复的,举例:(运行的结果是:经过得站点依次是:天水,天水,波阳,波阳,),各位高手帮忙看一下问题处在那里,谢谢

ALTER Procedure pro_smp_live_train_2(
@cOperationCode Char(21), --内部协议的业务代码
@cSrcAdd Char(21), --发送命令者的手机号
@cTrainID Char(6)) --列车的车次号码
As
Begin

--查询列车经过的所有站台名
--根据用户要求查询的列车类型进行查找
--并将查找到结果整理成完整的语言来描述出来
Declare @cMsg Varchar(400)
Declare @cStationName VarChar(16)
Declare @bHaveRecord Tinyint --用于判断是否找到纪录的标志位
Set @bHaveRecord = 0
Set @cMsg = rtrim(@cTrainID) + '经过的车站依次是:'

Begin
Declare train_cursor Cursor For
Select StationName From TrainTime
Where TrainID = @cTrainID
Order By StationID Asc

Open train_cursor

Fetch Next From train_cursor
Into @cStationName
--SELECT @cStationName
While @@Fetch_Status = 0
Begin
Set @bHaveRecord = 1
Set @cMsg = @cMsg + rtrim(@cStationName) + ','

Fetch Next From train_cursor INTO @cStationName

End
Close train_cursor
Deallocate train_cursor
End

--如果查不到车次,就返回提示信息
If @bHaveRecord = 0
Begin
--设置错误提示信息
Declare @cErrTipTrainID Varchar(50)
Set @cErrTipTrainID = '查找的车次并不存在,可发CB获得帮助'
Exec pro_smp_Output @cSrcAdd, @cOperationCode, @cErrTipTrainID, @cOperationCode, 0
Return
End

--按照命令字查找收费配置,并将短信内容发给调用者
Exec pro_smp_Output @cSrcAdd, @cOperationCode, @cMsg, @cOperationCode, 1
End


...全文
10 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
purpleshell 2003-05-23
up
回复
purpleshell 2003-05-22
yoki(小马哥) :
我加上了distinct,这时orderby子句报错,我去掉distinct,再去掉orderby,这时返回了正确的结果,为什么,orderby该怎么用
回复
Happiness 2003-05-22
不用游标

ALTER Procedure pro_smp_live_train_2(
@cOperationCode Char(21), --内部协议的业务代码
@cSrcAdd Char(21), --发送命令者的手机号
@cTrainID Char(6)) --列车的车次号码
As
Begin

--查询列车经过的所有站台名
--根据用户要求查询的列车类型进行查找
--并将查找到结果整理成完整的语言来描述出来
Declare @cMsg Varchar(400)

Set @cMsg = rtrim(@cTrainID) + '经过的车站依次是:'
if not exists (Select StationName From TrainTime
Where TrainID = @cTrainID)
Begin
--如果查不到车次,就返回提示信息
--设置错误提示信息
Declare @cErrTipTrainID Varchar(50)
Set @cErrTipTrainID = '查找的车次并不存在,可发CB获得帮助'
Exec pro_smp_Output @cSrcAdd, @cOperationCode, @cErrTipTrainID, @cOperationCode, 0
Return
End
else
Begin
Select @cMsg=@cMsg+rtrim(StationName)+ ',' From TrainTime
Where TrainID = @cTrainID
Order By StationID Asc
--按照命令字查找收费配置,并将短信内容发给调用者
Exec pro_smp_Output @cSrcAdd, @cOperationCode, @cMsg, @cOperationCode, 1

End


End
回复
Happiness 2003-05-22
这样改吧:

ALTER Procedure pro_smp_live_train_2(
@cOperationCode Char(21), --内部协议的业务代码
@cSrcAdd Char(21), --发送命令者的手机号
@cTrainID Char(6)) --列车的车次号码
As
Begin

--查询列车经过的所有站台名
--根据用户要求查询的列车类型进行查找
--并将查找到结果整理成完整的语言来描述出来
Declare @cMsg Varchar(400)
Declare @cStationName VarChar(16)
Declare @bHaveRecord Tinyint --用于判断是否找到纪录的标志位
Set @bHaveRecord = 0
Set @cMsg = rtrim(@cTrainID) + '经过的车站依次是:'
if not exists (Select StationName From TrainTime
Where TrainID = @cTrainID)
Begin
--如果查不到车次,就返回提示信息
--设置错误提示信息
Declare @cErrTipTrainID Varchar(50)
Set @cErrTipTrainID = '查找的车次并不存在,可发CB获得帮助'
Exec pro_smp_Output @cSrcAdd, @cOperationCode, @cErrTipTrainID, @cOperationCode, 0
Return
End
else
Begin
Select @cMsg=@cMsg+rtrim(StationName)+ ',' From TrainTime
Where TrainID = @cTrainID
Order By StationID Asc
--按照命令字查找收费配置,并将短信内容发给调用者
Exec pro_smp_Output @cSrcAdd, @cOperationCode, @cMsg, @cOperationCode, 1

End


End

回复
HawaiiLeo 2003-05-22
ALTER Procedure pro_smp_live_train_2(
@cOperationCode Char(21), --内部协议的业务代码
@cSrcAdd Char(21), --发送命令者的手机号
@cTrainID Char(6)) --列车的车次号码
As
Begin

--查询列车经过的所有站台名
--根据用户要求查询的列车类型进行查找
--并将查找到结果整理成完整的语言来描述出来
Declare @cMsg Varchar(400)
Declare @cStationName VarChar(16)
Declare @bHaveRecord Tinyint --用于判断是否找到纪录的标志位
Set @bHaveRecord = 0
Set @cMsg = rtrim(@cTrainID) + '经过的车站依次是:'

Begin
Declare train_cursor Cursor For
Select StationName From TrainTime
Where TrainID = @cTrainID
Order By StationID Asc

Open train_cursor

Fetch Next From train_cursor
Into @cStationName
--SELECT @cStationName
While @@Fetch_Status = 0
Begin
Set @bHaveRecord = 1
Set @cMsg = @cMsg + rtrim(@cStationName) + ','

SELECT @cMsg --Test @cMsg to find it is true??

Fetch Next From train_cursor INTO @cStationName

End
Close train_cursor
Deallocate train_cursor
End

--如果查不到车次,就返回提示信息
If @bHaveRecord = 0
Begin
--设置错误提示信息
Declare @cErrTipTrainID Varchar(50)
Set @cErrTipTrainID = '查找的车次并不存在,可发CB获得帮助'
Exec pro_smp_Output @cSrcAdd, @cOperationCode, @cErrTipTrainID, @cOperationCode, 0
Return
End

--按照命令字查找收费配置,并将短信内容发给调用者
Exec pro_smp_Output @cSrcAdd, @cOperationCode, @cMsg, @cOperationCode, 1
End
回复
yoki 2003-05-22
如果可以的话将pro_smp_Output也贴出来看看

再看看 Select StationName From TrainTime
Where TrainID = @cTrainID
Order By StationID Asc
查出来的结果
回复
检查数据表TrainTime是否存在重复记录!
回复
yoki 2003-05-22
Select StationName From TrainTime
改成Select DISTINCT StationName From TrainTime 试试
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2003-05-22 09:42
社区公告
暂无公告