社区
VB
帖子详情
如何将检索到的结果传给SQL的临时表?
JERRY_LIU
2005-04-03 08:40:32
我在vb.net内的datagrid内修改了n行记录,将修改过的记录挑选出来后,想更新sql里的table,有人建议我先存在临时表里面,再转存入真正的table里,如果用insert 将记录一行一行存入临时表的话,如果有十行不是要执行十次存储过程?有没有更简单有效的方法?
然后,临时表的数据是否可以用一句update的语句来更新?还是也得一行一行确认ID后再update?
...全文
302
7
打赏
收藏
如何将检索到的结果传给SQL的临时表?
我在vb.net内的datagrid内修改了n行记录,将修改过的记录挑选出来后,想更新sql里的table,有人建议我先存在临时表里面,再转存入真正的table里,如果用insert 将记录一行一行存入临时表的话,如果有十行不是要执行十次存储过程?有没有更简单有效的方法? 然后,临时表的数据是否可以用一句update的语句来更新?还是也得一行一行确认ID后再update?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
foxbuilder
2005-04-04
打赏
举报
回复
一般来说,有使用临时表和使用触发器两种方法.
个人认为,触发器使用起来更简单, 但对于复制更新(如需根本每条记录处理不同的逻辑代码往往太复杂,所以我一般采用临时表.
对于你所说的问题
q:
因为我的记录有可能几条是修改原资料,有几条是新增的,所以当我从临时表中往数据库里更新时,不能一条INSERT搞定。(我现在的想法是在vb.net里通过datarow.rowstate来判断)
a: 所谓更新,其实包括(新增,修改,删除), datarow.RowState 可以记录可以反映行的状态是(已新增,已修改,或已删除), 临时表结构,除了依照源表的结构的结构外,我自己另外加一了个nRowState(smallint)类型的字段,用以在临时表中保存每一行的RowState.
此种方法需要注意一点,你遍历每一个datarow的时候,你会发现DataState为Deleted的行并不能被你直接访问, 此时我采取的方法是
If dr.RowState = DataRowState.Deleted Then
IsDelete = True
dr.RejectChanges()
End If
在临时表中加入此行
If IsDelete Then
dr.Delete()
End If
q:
将记录存入临时表时,在.net下用sqlcommand执行存储过程,一个过程用来新建临时表,另一个用来新增记录,如果有十条记录那我就得执行sqlcommand.ExecuteNonQuery()十次?
我还担心我建立的是局部临时表,会不会当我执行第二次sqlcommand时,该表就不存在了?
a:
dim conn sqlconnection = getconn()
...
sqlcommand.ExecuteNonQuery(...) '建立临时表
dim dr as datarow
for each dr in dt.rows
sqlcommand.ExecuteNonQuery(...) '插入每行至临时表中....
end for
保证每次的sqlcommand使用的是同一个连接. 临时表都会有效.
至于调用效率,我觉得大可不必担心, 一次几十上百条记录应该是不会有太大感觉的.
dim conn as sqlconnection = getconn
hamadou
2005-04-04
打赏
举报
回复
可以判断行状态,或者使用dataview(取得是added的行),一般来说如果想往临时表里插入,就得一行一行做了。所以有多少次就要调多少次,有10条就要执行10次。临时表的使用见
terryshi(terryshi) 所说。
JERRY_LIU
2005-04-04
打赏
举报
回复
TO: hamadou(闵峰)
因为我的记录有可能几条是修改原资料,有几条是新增的,所以当我从临时表中往数据库里更新时,不能一条INSERT搞定。(我现在的想法是在vb.net里通过datarow.rowstate来判断)
将记录存入临时表时,在.net下用sqlcommand执行存储过程,一个过程用来新建临时表,另一个用来新增记录,如果有十条记录那我就得执行sqlcommand.ExecuteNonQuery()十次?
我还担心我建立的是局部临时表,会不会当我执行第二次sqlcommand时,该表就不存在了?
TO: harryho(基路亚)
触发器还没用过,正在学习中,谢谢你的回覆
terryshi
2005-04-04
打赏
举报
回复
select * into #temp_table form AAAA
临时表的定义和普通表是一样的,不同的是在访问结束后会自动删除
#XX表示局部临时表,一次查询后删除。
##XX表示全局临时表,一次连接后删除,差不多是SqlConnection.Close()。
hamadou
2005-04-04
打赏
举报
回复
存储进临时表如果使用存储过程自然要有多少条记录循环调用多少次。但最后更新进table中可以使用一条sql语句,insert into table_name select #temp_table.name,#temp_table.age等
JERRY_LIU
2005-04-04
打赏
举报
回复
如果按照foxbuilder的说法,当一行被删除时,先在临时表中删除该行,再从临时表导入原TABLE,等于是先把所有记录读入临时表,再把要删除的记录删掉,最后操作完后,将整个临时表的记录去覆盖原TABLE的全部记录.
如果表的记录不多还好,如果有上万条,这样不好吧。
如果我只提取被ADD,UPDATE,DELE的记录ID,直接存入原TABLE,不是少了一个中间环节?为什么要用临时表来中转?
harryho
2005-04-03
打赏
举报
回复
如果你是用SQL SERVER的话,我建议用TRIGGER.用TRIGGER的话就有一个甘样的表INSERTED专门来用存放你修改和插入表的记录.你可以用这个表的记录去更新你的TABLE.
create trigger trigger_name on table_name
for update,insert as
update table set 字段名= from inserted where ....
数据库
SQL
查询,最佳案例讲解
本课程介绍了
SQL
查询的从入门到精通系列,内容包含
SQL
查询基础知识、聚合函数、排序、分组、嵌套和连接查询,结合大量案例讲解。 一、基本介绍数据库用来存储数据,无论是运维人员还是开发人员必不可少的一个系统,
SQL
查询主要通过
SQL
语法到数据库中
检索
数据,在日常中使用的非常多。本课程内容包含:,内容包含
SQL
查询基础知识、聚合函数、排序、分组、嵌套和连接查询,所有的内容都是以LibraryDB数据库为背景,通过大量的案例逐一介绍查询中的每一个知识点的应用,实战型极强二、学习建议 在学习本课程的时候,一定要动手实现一个需求,写完了之后一定要多思考原理,并且看看是否有其他的方式实现,这样能快速和深入的学好本课程。 课程收获:在学习完本系列中所有的课程后,可以实现日常工作中绝大多数的
SQL
查询的需求,能够轻松应付DBA的日常查询需求,可以轻松应付日常的数据库开发工作中的
SQL
查询需求。 合适人群:1、IT初学者、数据库的初学者、在校学生2、打算进入IT运维行业的IT人士3、打算进入IT开发行业的IT人士
sql
使用临时
表
,返回多次查询结果
概述 在
SQL
层面上来,实现将多次点击按钮查询的结果,一起返回。 那么这样的方式有什么缺点呢? ...//将查询数据存入临时
表
select * from #temp //查询临时
表
当中的数据,就能够看见 ...
索引
SQL
Server临时
表
SQL
Server temp tables are a special type of tables that are written to the TempDB database and act like regular tables, providing a suitable workplace for intermediate data processing before savi...
sql
查询,把查出的数据作为临时
表
在进行查询
select count(*) total from ( select count(*) total from sys_user a left join fsms_fee_splitting b on a.su_name=b.fs_...temp---------------------------------temp为临时
表
,count()数据有几行
VB
16,557
社区成员
110,528
社区内容
发帖
与我相关
我的任务
VB
VB技术相关讨论,主要为经典vb,即VB6.0
复制链接
扫一扫
分享
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章