Foxtable(狐表)用户栏目专家坐堂 → 如何传递一个表到sql数据库的储存过程中?


  共有2996人关注过本帖树形打印复制链接

主题:如何传递一个表到sql数据库的储存过程中?

帅哥哟,离线,有人找我吗?
HappyFt
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1934 积分:17661 威望:0 精华:0 注册:2014/7/29 19:09:00
如何传递一个表到sql数据库的储存过程中?  发帖心情 Post By:2017/4/1 11:01:00 [只看该作者]

在前台程序中用动态sql语句拼成语句向表中插入一些行如:
"inert into 表名(字段1,字段2.....) 
se lcet (值1,值2.......)  union all
se lcet (值1,值2.......) "

想将这些新增的数据行做为一个表传到储存过程中再和其他后台表关联更新数据,因为不同表的字段数量不一致所以不能用固定字段的表面量,
代码要怎么写? 
还是说只能传入这个拼成的sql语句进到储存过程中生成一个临时表来用?

谢谢!



 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111407 积分:567105 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/4/1 11:23:00 [只看该作者]

还是直接传入这个sql吧。其它方法都比较麻烦

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1934 积分:17661 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/4/10 10:35:00 [只看该作者]

如果我用了这样的函数来执行事务:如下
Dim SqlList As List(of String) = Args(0)
Try
    Connections(Mydata).BeginTransaction() '开始事务
    Dim cmd As new SQLCommand
    cmd.ConnectionName = Mydata
    For Each sql As String In SqlList
        cmd.CommandText = sql
        cmd.ExecuteNonQuery()
    Next
    
    If vars("允许保存") = "NG" Then  '如果执行中出错ft语法错误则回滚
        Connections(Mydata).Rollback()  '回滚事务
    Else
        Connections(Mydata).Commit()  '提交事务
        sqlList.Clear()  '清空集合
        Return "OK"
    End If
Catch ex As Exception
    Connections(Mydata).Rollback()  '回滚事务
    msgbox(ex.tostring)      '返回错误信息
    sqlList.Clear()  '清空集合
    Return "NG"
End Try

我想问一下,如果其中的一个sql语句是调用sql数据库中的一个储存过程跨表更新其他表中的数据,那这个储存过程会一起加入到事务中来,同时提交或者回滚吗?

如果不能,中间执行出了错数据就不一致了.要怎么样才能让这个储存过程和上面这些sql集合中的每个sql语句一起执行或回滚叱?


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/10 10:55:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1934 积分:17661 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/4/10 11:25:00 [只看该作者]

看的似懂非懂,是否在执行那个储存过程后返回@@ERROR的值,如果不为0表示执行储存过程出错,事务函数就不提交即可,
是否可以这样理解?

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/10 11:28:00 [只看该作者]

 是的,可以这么理解。


 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1934 积分:17661 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/4/10 11:44:00 [只看该作者]

那还有个问题,如果这个储存过程执行没问题返回0,可以继续执行其他事务,但如果其他事务出错了回滚,又要怎么回滚那个已经执行的储存过程呢?

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111407 积分:567105 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/4/10 12:00:00 [只看该作者]

存储过程里不需要再用事务,除非你显式提交了,否则多次调用存储过程也是会参与到顶层事务中的

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/10 12:11:00 [只看该作者]

 你的存储过程里面写有事务吗?如果事务没有提交过,都是可以回滚的。

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1934 积分:17661 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/4/10 12:31:00 [只看该作者]

储存过程里面没有事务,就类似这样:
CREATE PROCEDURE MyProcedure
AS
BEGIN
    SE T NOCOUNT ON;
    DE LETE FROM rxqz WHERE qz = 'rx015 '; --删除数据
    UPDATE sz SE T name = '李丽s' WHERE name = '李丽'; --修改数据
END;

事务函数中有这样一句调用了这个储存过程
Dim cmd As New SQLCommand
cmd.Connection Name = Mydata
cmd.CommandText = "Exec MyProcedure" 

就想实现 函数中的其他事务语句和上面调用的这个储存过程要么同时执行,要么同时回滚


 回到顶部
总数 21 1 2 3 下一页