教程学院
图像设计 多媒体类 机械制图 办公软件 操作系统 系统编程 网站编程 网页制作 数据库类 网络路由 网络工程 网络安全 考试认证
firefox火狐浏览器下载
酷网学院
CAD
AutoCad Cam350 ProEngineer GCcam MATLAB Unigraphics SolidWorks CAXA Solid3000 Cimatron EdgeCAM
系统
安全 防火墙 病毒 WinXP Win2003 Vista
数据库
编程
网络
精彩图库
  当前位置: 库库中文网 · 数据库类教程 · MSSQL教程 · MsSql综合技巧

【脑袋快想爆炸了- -!】 怎么样运用一条SQL语句更新多条数据??

学院最新推荐文章
教程推荐
『【脑袋快想爆炸了- -!】 怎么样运用一条SQL语句更新多条数据??』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
点击数: 更新时间:2008-9-28 
做的是.net2.0的项目,用的是SQL 2005。

背景:
现在为了回避 FOR循环 来多次访问数据库,
所以bt客户希望 使用一条SQL语句来更新多条数据。

现状:

现在传到DataAcess层的数据是个dataTable。
格式是:

变量A1  变量B1 变量C1
变量A2  变量B2 变量C2
变量A3  变量B3 变量C3
变量A4  变量B4 变量C4
...    ...    ...


更新内容(set部分)是固定的。更新的条件(where部分)的字段也是固定的。
大概写成这个意思,

update tableA
set field1 = '1',field2 = '2'
where field3 = 变量Ax and field4 = 变量Bx and field5 = 变量Cx
--这个x是表示变量的意思。

被放弃的思路:
1,因为多条数据,所以不可能用or来串成一个SQL语句来执行,长度会超过限度,出异常。
2,用in肯定也不行,会出现混乱。

请高手指点!!!谢谢!!!


这个问题第1个回答:
在 .net中字符超长?
那做成过程
这个问题第2个回答:
过程也不行,再想想
这个问题第3个回答:
的确是.net的不行,超过8000个字符就挂了。。。这个是理论上的长度。

我们做的时候,也的确挂了,但没数长度是不是8000,估计差不多。
这个问题第4个回答:
使用存储过程吧
这个问题第5个回答:
存储过程不允许用。

理由很简单,数据库是多个系统使用。
一旦一个存储过程出问题,对整个库都有影响。

也影响到其他系统的运作了。
这个问题第6个回答:
把起其所有要更新的Id拼成一个串,传递到存储过程中,然后再分割字符串,操作。可以否?
这个问题第7个回答:
一旦一个存储过程出问题,对整个库都有影响。

是不是你们那里的数据库由DBA来管了,假如是的话,可以请他来写存储过程,像你说的这个问题,我倾向于写存储过程。
这个问题第8个回答:
换个思路换个思路。。。

确认了,不允许用存储过程。。。
这个问题第9个回答:
挺奇怪的.照道理肯定是SP要比直接sql command好.
有方便又安全.
不能用sp.就只能拼字符串了.
我想不到再好的办法.
这个问题第10个回答:
那就禁止他每次提交的修改拼接成SQL后超过8000,谁让他提那么变态的要求-_,-


不知道.net2.0怎么处理,数据库中SQL语句超过8000就分2个变量存储,最后拼接执行
这个问题第11个回答:
数据量大不大,可以考虑用dataset储存,调用时用dataview过滤

如果用户较多,考虑一下cache
这个问题第12个回答:
。。。。哎···

由于受硬件条件的限制,即,服务器上同时有多个系统在运行。

很多东西在开发中都禁止使用的。
比如sql的存储过程,已经ap服务器端的cache。

目前看来,,
各位大侠的回答都不是我想要的答案啊。。。

苦恼啊。。。

这个问题第13个回答:
,以把变量临时生成一个临时表。然后根据表连接更新?
这个问题第14个回答:
看来重点是SQL长度。像下面这样应该可以有所减少:


SQL code

declare @t table(field1, field2, 变量A1,  变量B1, 变量C1)

insert @t values(field1, field2, 变量A1,  变量B1, 变量C1)

insert @t values(field2, field3, 变量A2,  变量B2, 变量C2)

...



update tableA 

set field1 = b.field1,field2 = b.field2 

from tableA a, @t b

where 

a.id = b.id

and a.field3 = b.filed3 ...


这个问题第15个回答:
可以考虑在C#代码中动态创建存储过程。

作者:wxylvmnn 来源:C.S.D.N
】【关闭窗口
·上页:
·下页: 没有了
相关文章
没有相关教程
     数据库类教程 - MsSql综合技巧
普通教程【脑袋快想爆炸了- -!】 怎么样
普通教程关于级联删除地疑难,新手提问,
普通教程怎么样动态控制列数?
普通教程数据库恢复 MS2000
普通教程当数据库中varchar字段值为null
普通教程create function 怎么才无法要返
普通教程各位帮我看看是啥疑难啊, SQL运
普通教程SQL server 2005 安装疑难 SP2更
普通教程sql update
普通教程update触发器地疑难
普通教程字符串地查询疑难
普通教程安全性--登陆--想建一个用户tes
精彩图片汇集
advertisement
关于站点 - 广告服务 - 联系我们 - 版权隐私 - 免责声明 - 合作伙伴 - 程序支持 - 网站地图 - 返回顶部
网站文本地图
版权所有:库库中文 2005-2007 欢迎各种媒体转载我们的原创作品[转载请注明出处]
copyright © 2005-2008 www.QQGB.com online services. all rights reserved. 蜀ICP备05015578
Template designed by Virus. Optimized for 1024x768 to Firefox,Opera and MS-IE6. Site powered by EQL.
红盾
热爱电脑,热爱生活
拥有电脑,拥有生命
让我们享受拥有电脑的时光