在Delphi中关于sql server中存储过程的问题

shto 2000-04-04 09:17:00
以下是我在sql server中编写的存储过程:
CREATE proc RefreshNo(@aFldName char(40),@aTabName char(40)) AS
execute('declare cur1 cursor dynamic
for
select '+@aFldName+' from '+@aTabName)

declare @i int
declare @ci char(4)

set @i=1
open cur1
fetch next from cur1
while @@fetch_status=0 begin
set @ci=convert(char,@i) ----语句1
execute('update '+@aTabName+' set '+@aFldName+'='+@ci+' where current of cur1') ----语句2
fetch next from cur1
set @i=@i+1
end
close cur1
deallocate cur1

我的表gjn1中有两个字段:序号 int null, 全宗号 char(10) not null
我执行存贮过程的语句是:exec RefreshNo '序号','gjn1'
我的目的是要从新给序号字段排序,即1,2,3,4,......
令人奇怪的是,我在sql server中执行该存储过程,表gjn1的序号字段修改成功
可是,我在delphi5中执行该存储过程,表gjn1的序号字段只能修改37条记录,
以后的记录的序号字段为0,如果我把存储过程中的语句1删除后,就能全部
更新记录,但我怎么达到我的目的呢?
另外,由于我要动态给存储过程赋表名,所以我必须使用execute('......')格式,
由于@i是整形变量,所以我要多写一条语句1.

请问各位大虾,我该用什么办法才能实现我的目的!



...全文
168 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Axiong 2000-04-24
  • 打赏
  • 举报
回复
你这个问题是有点复杂。
你可以先 声明一个本地变量。再把光标的值赋给它。就可以搞定。
我想了好久都不明白为什么会这样。我开始执行时发现该procedure有很多recordset。所以delphi会报错。后来才发现光标的值没有赋给一个本地变量才会导致多recordset的情况。我查了online help 也没能找的why?
希望大家继续找出why?
CREATE proc RefreshNo(@aFldName char(40),@aTabName char(40)) AS
execute('declare cur1 cursor for select '+@aFldName+' from '+@aTabName)
declare @i int
declare @ci char(4) ,@k char(40)
select @i=1
select @ci=convert(char,@i)
open cur1
fetch next from cur1 into @k
while @@fetch_status=0
begin
select @ci=convert(char,@i) ----语句1
execute('update '+@aTabName+' set '+@aFldName+'='+@ci+' where current of cur1') ----语句2
select @i=@i+1
fetch next from cur1 into @k
end
close cur1
deallocate cur1

34,576

社区成员

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

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