请帮我看看,游标CURSOR的问题

断弦吉他 2005-11-18 03:12:30
declare @UsrNo nvarchar(11)
declare @TempStr nvarchar(100)
declare @FuncName nvarchar(100)
declare @TempSQL nvarchar(1000)

set @UsrNo='1234567'

Set @TempStr=N''
SET @tempSQL ='DECLARE funcation_cursor CURSOR FOR '
+'select distinct ID,name from tb_sms_018600_mobile_user_funcation a'
+',tb_sms_018600_mobile_sys_funcation b where a.tel_no='+@UsrNo +' and a.code=b.code'
EXEC(@tempSQL)
OPEN funcation_cursor
FETCH NEXT FROM funcation_cursor INTO @FuncName
WHILE @@FETCH_STATUS = 0
begin
Set @TempStr=@TempStr+N''+@FuncName+'/'
FETCH NEXT FROM funcation_cursor INTO @FuncName
end
CLOSE funcation_cursor
DEALLOCATE funcation_cursor


print @TempStr

执行以上的语句,编辑器提示:

服务器: 消息 8114,级别 16,状态 5,行 14
将数据类型 nvarchar 转换为 numeric 时出错。

我想尽办法也查不出来原因,请大家指教!!

谢谢
...全文
307 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
断弦吉他 2005-11-18
  • 打赏
  • 举报
回复
非常感谢各位的热心帮助!!,

特别感谢yinwun(小哲) ,就是引号的问题!!

谢谢!!
funsuzhou 2005-11-18
  • 打赏
  • 举报
回复
楼主,你定义游标时有2个参数

FETCH NEXT FROM funcation_cursor INTO @FuncName
只有一个参数啊
yinwun 2005-11-18
  • 打赏
  • 举报
回复
@UsrNo是一个字符串要''引着才可以 where userno = '1223445'
yinwun 2005-11-18
  • 打赏
  • 举报
回复
引号问题吧
SET @tempSQL ='DECLARE funcation_cursor CURSOR FOR '
+'select distinct ID,name from tb_sms_018600_mobile_user_funcation a'
+',tb_sms_018600_mobile_sys_funcation b where a.tel_no='+''''+@UsrNo +'''' +' and a.code=b.code'
断弦吉他 2005-11-18
  • 打赏
  • 举报
回复
这就是完整的代码啊
子陌红尘 2005-11-18
  • 打赏
  • 举报
回复
贴出完整的代码,断章取义,无法定位错误。
断弦吉他 2005-11-18
  • 打赏
  • 举报
回复
我的目的是:比如说选择了多条记录(记录数不定):
多幅斯多夫缩短
斯多夫缩短
活济公火炬
加害于土语
维尔维尔维尔瓦

我想把他们连接成一条文本:
多幅斯多夫缩短斯多夫缩短活济公火炬加害于土语维尔维尔维尔瓦
点点星灯 2005-11-18
  • 打赏
  • 举报
回复
根据你的错误提示,出错的原因就是:一个数字和一个字符串相加

检查你的数据上的问题。
断弦吉他 2005-11-18
  • 打赏
  • 举报
回复
不行
点点星灯 2005-11-18
  • 打赏
  • 举报
回复
declare @UsrNo nvarchar(11)
declare @TempStr nvarchar(100)
declare @FuncName nvarchar(100)
declare @TempSQL nvarchar(1000)

set @TempStr='' --少了一句

set @UsrNo='1234567'

Set @TempStr=N''
SET @tempSQL ='DECLARE funcation_cursor CURSOR FOR '
+'select distinct ID,name from tb_sms_018600_mobile_user_funcation a'
+',tb_sms_018600_mobile_sys_funcation b where a.tel_no='+@UsrNo +' and a.code=b.code'
EXEC(@tempSQL)
OPEN funcation_cursor
FETCH NEXT FROM funcation_cursor INTO @ID,@FuncName
WHILE @@FETCH_STATUS = 0
begin
Set @TempStr=@TempStr+N''+convert(varchar(20),@FuncName)+'/'
FETCH NEXT FROM funcation_cursor INTO @ID,@FuncName
end
CLOSE funcation_cursor
DEALLOCATE funcation_cursor


print @TempStr
断弦吉他 2005-11-18
  • 打赏
  • 举报
回复
我是根据这个写的,这个正常:
Set @MessageStr=N''
SET @tempStr ='DECLARE authors_cursor CURSOR FOR'
+' select a.fee,b.codeNote FROM '+@BillPeriodTableName
+' a,tb_sms_018600_feecode b WHERE a.tel_no='+@Tel_No
+' and a.fee>0 and a.billcode=b.billcode order by a.billcode'
EXEC(@tempStr)
OPEN authors_cursor
FETCH NEXT FROM authors_cursor INTO @UserFee, @FeeNote
WHILE @@FETCH_STATUS = 0
begin
Set @MessageStr=@MessageStr+N''+@FeeNote+N':'+Cast(@UserFee as nvarchar(10))+N'元;'
FETCH NEXT FROM authors_cursor INTO @UserFee, @FeeNote
end
Set @MessageStr=@MessageStr+N'合计:'+Cast(@UserFeeSum as nvarchar(10))+N'元.'
CLOSE authors_cursor
DEALLOCATE authors_cursor

为什么呢??
断弦吉他 2005-11-18
  • 打赏
  • 举报
回复
服务器: 消息 8114,级别 16,状态 5,行 14
将数据类型 nvarchar 转换为 numeric 时出错。

还是不行
子陌红尘 2005-11-18
  • 打赏
  • 举报
回复
在声明游标时,结果集中有ID和Name两个字段,在遍历游标时,FETCH操作会将第一个字段ID赋值给变量@FuncName,自然就出错了。
点点星灯 2005-11-18
  • 打赏
  • 举报
回复
declare @UsrNo nvarchar(11)
declare @TempStr nvarchar(100)
declare @FuncName nvarchar(100)
declare @TempSQL nvarchar(1000)

set @TempStr='' --少了一句
set @UsrNo='1234567'

Set @TempStr=N''
SET @tempSQL ='DECLARE funcation_cursor CURSOR FOR '
+'select distinct ID,name from tb_sms_018600_mobile_user_funcation a'
+',tb_sms_018600_mobile_sys_funcation b where a.tel_no='+@UsrNo +' and a.code=b.code'
EXEC(@tempSQL)
OPEN funcation_cursor
FETCH NEXT FROM funcation_cursor INTO @FuncName
WHILE @@FETCH_STATUS = 0
begin
Set @TempStr=@TempStr+N''+@FuncName+'/'
FETCH NEXT FROM funcation_cursor INTO @FuncName
end
CLOSE funcation_cursor
DEALLOCATE funcation_cursor


print @TempStr
子陌红尘 2005-11-18
  • 打赏
  • 举报
回复
declare @UsrNo nvarchar(11)
declare @TempStr nvarchar(100)
declare @FuncName nvarchar(100)
declare @TempSQL nvarchar(1000)

declare @ID int

set @UsrNo='1234567'

Set @TempStr=N''
SET @tempSQL ='DECLARE funcation_cursor CURSOR FOR '
+'select distinct ID,name from tb_sms_018600_mobile_user_funcation a'
+',tb_sms_018600_mobile_sys_funcation b where a.tel_no='+@UsrNo +' and a.code=b.code'
EXEC(@tempSQL)
OPEN funcation_cursor
FETCH NEXT FROM funcation_cursor INTO @ID,@FuncName
WHILE @@FETCH_STATUS = 0
begin
Set @TempStr=@TempStr+N''+@FuncName+'/'
FETCH NEXT FROM funcation_cursor INTO @ID,@FuncName
end
CLOSE funcation_cursor
DEALLOCATE funcation_cursor


print @TempStr

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧