一次执行多个sql的问题 在一个字符串里写入多个sql,用分号分隔,用ado.net在oracle数据库里执行报错,分隔符错误加上换行符也报错,在sql server里好像可以有人能给点建议吗 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 begin sql1; sql2;end; 有时我们需要一次性执行多条sql语句,而用来更新的sql是根据实际情况用代码拼出来的解决方案是把sql拼成下面这种形式:beginupdate TB_VG set seq = 1, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20837' and train_id = '0233086';update TB_VG set seq = 2, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20992' and train_id = '0233110';end;总结如下:以begin开始,以end;结尾(end后的分号不能省),中间的每个sql语句要以分号;结尾在实际编码中,发现即使这样也会有错误发生,把sql语句中的换行符替换成空格就可以了比较稳妥的编码方式是:1、以正常的方式编写sql,根据阅读与编写的需要,中间肯定会有换行符2、在执行之前进行替换:strSql = strSql.Replace("r\n", " ").Replace('\n', ' ');如果不采用这种方式,可能的异常有:ORA-00933: SQL 命令未正确结束(如果sql没有以分号结尾)ORA-00911: 无效字符(如果未加begin 和 end)ORA-06550: 第x行, 第xxx列: PLS-00103: 出现符号 "end-of-file"在需要下列之一时:......(如果end后面没有;分号)ORA-06550: 第x行, 第xxx列: PLS-00103: 出现符号 ""在需要下列之一时:......(语句之间有换行符)From:http://www.cnblogs.com/teamleader/archive/2007/05/31/765943.html beginsql1;sql2;end;这种方式在sql server里报错吗,我的程序需要在多个数据库上跑? 在sql server 里面 不用分号都行 一次执行多条SQL语句应该是针对单个数据库来说的,在Sql Server 中想执行多条语句就没有这么麻烦了...建议分开来写... 估计楼主的 sql语句 是要 做成事务的。而且不是很方便分开来写,可能需要动态拼成语句 beginsql1;sql2;end;这种方式在sql server里报错吗,我的程序需要在多个数据库上跑?===========================================================sql server 也可以这么用 lbx1979(Love Arsenal) ( ) 信誉:101 Blog 加为好友 2007-06-21 14:36:21 得分: 0 beginsql1;sql2;end;这种方式在sql server里报错吗,我的程序需要在多个数据库上跑? Oracle PL/SQL和Microsoft SQL Server Transact-SQL都支持用BEGIN…END术语来标记语句块如果楼主你的程序要同时使用多个数据库建议你的DAL用工厂Factory来对应生成吧,T-SQL和PL/SQL的用法区别在很多时候是难以通用的。(个人意见,仅供参考) 估计实现的是事务吧?建议看一下SQL事务和ado.net事务 用的ado.net 1.1 ado.net事务还是得加上吧这样一起执行不能保证事务 SQL可以用分号来分开执行的;;;;;;;;;;;;;;;;;;; sql += " and ............";就行了 在SQL中,将多个SQL语句放入SQLCommand执行是没有问题的,但你用oracle就不清楚了。如果真的不行,暂时又解决不了,建议以下2种方法:1 改为调用存储过程2 使用同一个连接,分开多次执行多个命令 C# Report1.rdlc文件的使用 水晶报表 即急急急急、、、 随机生成一个20到30之间的随机数,生成的随机数要保留小数点后面3位数并且小数点第三位是0 关于socket异步的问题,帮忙看看 如何找到窗体的位置 log4net #################东北和内蒙的兄弟请进,有句肺腑之言想和你们说##################### 怎样将"20*10+5*20"这样的字符串表达式"计算"后返回结果300? 有没有办法将字符串转换为变量? 七折卖C#方面的书,我现在不用了 Address.txt正在被另外一个进程使用,因此该进程不能访问该文件 原因
sql1;
sql2;
end;
update TB_VG set seq = 1, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20837' and train_id = '0233086';
update TB_VG set seq = 2, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20992' and train_id = '0233110';
end;总结如下:
以begin开始,以end;结尾(end后的分号不能省),中间的每个sql语句要以分号;结尾在实际编码中,发现即使这样也会有错误发生,把sql语句中的换行符替换成空格就可以了
比较稳妥的编码方式是:
1、以正常的方式编写sql,根据阅读与编写的需要,中间肯定会有换行符
2、在执行之前进行替换:strSql = strSql.Replace("r\n", " ").Replace('\n', ' ');如果不采用这种方式,可能的异常有:ORA-00933: SQL 命令未正确结束(如果sql没有以分号结尾)
ORA-00911: 无效字符(如果未加begin 和 end)
ORA-06550: 第x行, 第xxx列: PLS-00103: 出现符号 "end-of-file"在需要下列之一时:......(如果end后面没有;分号)
ORA-06550: 第x行, 第xxx列: PLS-00103: 出现符号 ""在需要下列之一时:......(语句之间有换行符)From:http://www.cnblogs.com/teamleader/archive/2007/05/31/765943.html
sql1;
sql2;
end;
这种方式在sql server里报错吗,我的程序需要在多个数据库上跑?
而且不是很方便分开来写,可能需要动态拼成语句
sql1;
sql2;
end;
这种方式在sql server里报错吗,我的程序需要在多个数据库上跑?
===========================================================
sql server 也可以这么用
begin
sql1;
sql2;
end;
这种方式在sql server里报错吗,我的程序需要在多个数据库上跑?
Oracle PL/SQL和Microsoft SQL Server Transact-SQL都支持用BEGIN…END术语来标记语句块如果楼主你的程序要同时使用多个数据库建议你的DAL用工厂Factory来对应生成吧,T-SQL和PL/SQL的用法区别在很多时候是难以通用的。(个人意见,仅供参考)
这样一起执行不能保证事务
就行了
如果真的不行,暂时又解决不了,建议以下2种方法:
1 改为调用存储过程
2 使用同一个连接,分开多次执行多个命令