存储过程 游标问题

Neusoft06 2014-02-06 01:21:48
向一个表插入数据时发生的

从一个表中取数据
DECLARE StartEndCur CURSOR FOR
SELECT 字段
FROM
表名
WHERE
ID = @ID
BEGIN TRY

BEGIN TRANSACTION
--打开游标
OPEN StartEndCur
--这里开始循环?
FETCH NEXT FROM StartEndCur INTO
@EQUIPMENTCODE --保存到声明的字段变量中

SET @i = 0
WHILE (@i <= @PROCESSCOUNT)
BEGIN
。。。。。
SET @i = @i + 1

从A表查找数据,如果不存在,向B表插入数据,如果存在则更新这条数据

问题来了,刚插入一条数据,那么进入下一次循环时更新这条数据的时候会报错。
这种做法有问题么
3609

...全文
150 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Neusoft06 2014-02-07
  • 打赏
  • 举报
回复
业务逻辑问题
Neusoft06 2014-02-07
  • 打赏
  • 举报
回复
问题找到了,是逻辑上有问题,谢谢以上回复 结贴
Neusoft06 2014-02-06
  • 打赏
  • 举报
回复
通过触发器调用的,还有一个3000多行的呢 我还是多打印一些信息跟踪吧 不过谢谢你这么热心
LongRui888 2014-02-06
  • 打赏
  • 举报
回复
引用 11 楼 neusoft06 的回复:
[quote=引用 10 楼 neusoft06 的回复:] [quote=引用 9 楼 yupeigu 的回复:] [quote=引用 7 楼 neusoft06 的回复:] 我在想是不是上一条插入没有执行完呢 还在内存里呢 所以更新失败呀 不知道想的对不对
你有完整的代码不,这个代码,看不出什么问题[/quote] 有点长,麻烦你帮我看看[/quote] http://blog.csdn.net/neusoft06/article/details/18949475[/quote] 呵呵,挺长的哈,800多行代码。
Neusoft06 2014-02-06
  • 打赏
  • 举报
回复
引用 10 楼 neusoft06 的回复:
[quote=引用 9 楼 yupeigu 的回复:] [quote=引用 7 楼 neusoft06 的回复:] 我在想是不是上一条插入没有执行完呢 还在内存里呢 所以更新失败呀 不知道想的对不对
你有完整的代码不,这个代码,看不出什么问题[/quote] 有点长,麻烦你帮我看看[/quote] http://blog.csdn.net/neusoft06/article/details/18949475
Neusoft06 2014-02-06
  • 打赏
  • 举报
回复
引用 9 楼 yupeigu 的回复:
[quote=引用 7 楼 neusoft06 的回复:] 我在想是不是上一条插入没有执行完呢 还在内存里呢 所以更新失败呀 不知道想的对不对
你有完整的代码不,这个代码,看不出什么问题[/quote] 有点长,麻烦你帮我看看
LongRui888 2014-02-06
  • 打赏
  • 举报
回复
引用 7 楼 neusoft06 的回复:
我在想是不是上一条插入没有执行完呢 还在内存里呢 所以更新失败呀 不知道想的对不对
你有完整的代码不,这个代码,看不出什么问题
LongRui888 2014-02-06
  • 打赏
  • 举报
回复
引用 7 楼 neusoft06 的回复:
我在想是不是上一条插入没有执行完呢 还在内存里呢 所以更新失败呀 不知道想的对不对
不会吧,日语啊。。。 看不懂呢。。。
Neusoft06 2014-02-06
  • 打赏
  • 举报
回复
我在想是不是上一条插入没有执行完呢 还在内存里呢 所以更新失败呀 不知道想的对不对
Neusoft06 2014-02-06
  • 打赏
  • 举报
回复
メッセージ 50000、レベル 16、状態 1、プロシージャ T_COILRESULT_RECORD、行 23 T_COILRESULTの登録・更新に失敗しました メッセージ 3609、レベル 16、状態 1、行 1 トランザクションはトリガーで終了しました。バッチは中止されました。
LongRui888 2014-02-06
  • 打赏
  • 举报
回复
引用 4 楼 neusoft06 的回复:
[quote=引用 2 楼 yupeigu 的回复:] 这个是merge 语句的一个例子,你可以参考一下。 适合2008: SQL Server MERGE 例子 http://hi.baidu.com/wangzhiqing999/item/b929550ebcc152d772e67624
谢谢你的回复,这是一个做好程序,只是不知道问题出现的原因在哪里[/quote] 哦,具体报了什么错误
Neusoft06 2014-02-06
  • 打赏
  • 举报
回复
引用 2 楼 yupeigu 的回复:
这个是merge 语句的一个例子,你可以参考一下。 适合2008: SQL Server MERGE 例子 http://hi.baidu.com/wangzhiqing999/item/b929550ebcc152d772e67624
谢谢你的回复,这是一个做好程序,只是不知道问题出现的原因在哪里
LongRui888 2014-02-06
  • 打赏
  • 举报
回复
另外,你的游标看着不太对,我觉得那个while应该改成这样把: DECLARE StartEndCur CURSOR FOR SELECT 字段 FROM 表名 WHERE ID = @ID BEGIN TRY BEGIN TRANSACTION --打开游标 OPEN StartEndCur --这里开始循环? FETCH NEXT FROM StartEndCur INTO @EQUIPMENTCODE --保存到声明的字段变量中 SET @i = 0 WHILE @@fetch_status = 0 --表示游标状态正确,游标中还有记录 BEGIN 。。。。。 取下一条数据 SET @i = @i + 1
LongRui888 2014-02-06
  • 打赏
  • 举报
回复
这个是merge 语句的一个例子,你可以参考一下。 适合2008: SQL Server MERGE 例子 http://hi.baidu.com/wangzhiqing999/item/b929550ebcc152d772e67624
LongRui888 2014-02-06
  • 打赏
  • 举报
回复
这个没必要写这么复杂吧,用循环和游标。 你用的是2008吗,如果用2008,可以直接用merge语句,很方便的实现:没有数据就insert,如果有就update的

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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