社区
MS-SQL Server
帖子详情
在SQL中可以跳过错误继续执行语句吗?
wzh1215
2006-12-04 08:43:55
比如语法级的错误,数值与字符(含有非数字的字符)比较,在SQL中就会报错,也就导致程序中止,如何能跳过或事先判断语名的合法性再继续执行呢?
...全文
2951
22
打赏
收藏
在SQL中可以跳过错误继续执行语句吗?
比如语法级的错误,数值与字符(含有非数字的字符)比较,在SQL中就会报错,也就导致程序中止,如何能跳过或事先判断语名的合法性再继续执行呢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
GTBGT525
2006-12-06
打赏
举报
回复
已阅~ 突然想到用触发器不知是不是也能做到SKIP~~关注ING~
HAPPY冰石
2006-12-05
打赏
举报
回复
sqlserver中对sql可能出现错误的语句用try catch结构包装(存储过程中)
q42286451
2006-12-05
打赏
举报
回复
应该可以,你用触发器看看可以不
zjcxc
元老
2006-12-04
打赏
举报
回复
sql 2000的安装盘有示例, 你可以通过sql 2000的安装程序(自定义安装)把示例安装上就有了
wzh1215
2006-12-04
打赏
举报
回复
不懂sqldmo,能给个示例学习学习吗?
zjcxc
元老
2006-12-04
打赏
举报
回复
我的意思是直接把动态生成的结果语句, 传递给sqldmo检查
因为无论什么动态语句, 你最终都会得到一个要执行的语句嘛.
wzh1215
2006-12-04
打赏
举报
回复
要指出的是,Ctrl+F5无法检查动态语句中的错误,SQLDMO也应该不行吧!
wzh1215
2006-12-04
打赏
举报
回复
领教,多谢邹老大,我已通过事先转将不合法的比较转换为合法的比较,问题解决!
zjcxc
元老
2006-12-04
打赏
举报
回复
动态语句可以减少很多程序代码的编写及编写通用的数据表
--------------------------------------------------------------
这点可以同意, 但
1. 对象和列是否存在是可以事先判断的
2. 编写规范的代码可以很大程度上避免
比如
动态语句必须用参数传递(sp_executesql),以 避免参数中特殊的字符
对象名和列名一律使用规范的命名, 并加[], 可以用QUOTENAME(objectname)来生成, 以避免对象名中包含特殊字符
规定好参数的大小, 比如对象名不能超过256字符
3. 存储过程一般来说, 不会随时变化的, 加强检查, 预先避免可能产生岐义的写法
zjcxc
元老
2006-12-04
打赏
举报
回复
如果是sql 2005, 则可以写CLR检查函数, 通过SMO对象来检查语法.
当然, 无论怎么样, 效率都是一个问题, 而且也不能保证语法通过的, 一定能执行, 例如下面这句:
SELECT * FROM tb
语法检查是会通过的, 但如果tb表不存在, 一样会错
无论是SQLDMO, 还是SMO, 使用它们的语法检查功能, 效果都类似于查询分析器中按 Ctrl+F5 的效果.
wzh1215
2006-12-04
打赏
举报
回复
动态语句可以减少很多程序代码的编写及编写通用的数据表,对于当前十分的有必要!
zjcxc
元老
2006-12-04
打赏
举报
回复
当然了, 如果你一定追求检查语法再执行.
那也勉强可以实现, 使用sp_OaCreate创建SQLDMO对象, 使用里面的语法检查功能先检查动态语句, 检查通过再执行.
之所以说勉强, 是因为效率低, 而且受限于参数传递的限制, 只能传递8000字节, 如果语句中使用了临时表, 有可能语法检查是通不过的.
zjcxc
元老
2006-12-04
打赏
举报
回复
动态SQL本来就建议少用啊.
而且, 动态SQL一般也不用动态到连大部分业务处理逻辑也要动态生成的地步吧? 如果动态到那种地步, 还是建议程序中直接生成T-SQL了
如果没有动态到那个地步, 那一般来说, 是很少机会会产生语法错误了.
caixia615
2006-12-04
打赏
举报
回复
老大发话了,那应该是不行了...
wzh1215
2006-12-04
打赏
举报
回复
存储过程嵌套调用中的错误
--测试的存储过程1
create proc p1
as
print 12/0
if @@error<>0
print '发生错误1'
select * from newid()
if @@error<>0
print '发生错误2'
go
--测试的存储过程2
create proc p2
as
exec p1
if @@error<>0
print '调用 存储过程1 异常结束'
else
print '调用 存储过程1 正常结束'
go
--调用
exec p2
go
--删除测试
drop proc p1,p2
/*--测试结果
服务器: 消息 8134,级别 16,状态 1,过程 p1,行 8
遇到被零除错误。
发生错误1
服务器: 消息 208,级别 16,状态 1,过程 p1,行 12
对象名 'newid' 无效。
调用 存储过程1 异常结束
--*/
/*--结论2:
被调用的存储过程发生严重错误时,调用它的存储过程可以捕获错误,并可以继续执行下去
--*/
--摘自zjcxc(邹建),我测试过,无法适应语法级的错误!
zjcxc
元老
2006-12-04
打赏
举报
回复
语法错误如何在SQL中判断? 无法判断吧?
wzh1215
2006-12-04
打赏
举报
回复
使用的是较复杂的动态语句,事先很难判断语句的合法性,等到执行时就有可能会有语法上的错误,一遇上语法错误程序就已经终止,还来不及获得@@error!
xiaoku
2006-12-04
打赏
举报
回复
期待...
感觉不行!
Well
2006-12-04
打赏
举报
回复
用@@error和goto进行断点转移
jackeyabc
2006-12-04
打赏
举报
回复
我也觉得不行,期待高手...............
等待中...........
加载更多回复(2)
批量执行
sql
语句
时,如何
跳过
其
中
发生的
错误
,
继续执行
剩下的
sql
语句
,最后在显示所有
错误
信息
最近,在写项目的时候,遇到这样一个需求,即批量执行数据库授权
语句
(grant ),当n条授权
语句
内某一条授权
语句
,执行失败后,记录其
错误
信息,然后
继续执行
剩下的grant
语句
,最后在吧
错误
信息统一抛出。...
sql
cmd 执行
sql
错误
日志打印 并
继续执行
参数允许
错误
发生后
继续执行
,但在逻辑上相互依赖的多个
语句
之间,如果前一个
语句
...
中
执行
SQL
脚本时即便遇到
错误
也能
继续执行
后续的命令,并同时打印
错误
日志,可以使用。参数表示在遇到
错误
时
继续执行
下一个批次。
my
sql
sql
语句
遇到
错误
继续_My
SQL
从数据库
sql
语句
执行
错误
解决方法
准备:两台机器一主一从192.168.1.150 主192.168.1.151 从数据库主从配置完毕,并且主从正常工作
中
。开始模拟线上的
错误
首先用...在从数据库执行
sql
语句
insert into user_logs (account_id,category,type,value1,va...
my
sql
跳过
报错继续导入_win处navicat直接导出的
sql
脚本导入Linux my
sql
报错问题
最近几天在把win上的项目的数据库转移到Ubuntu,于是第一件事就是从win处的navicat直接导出
sql
脚本,然后进入Ubuntu导入的时候会报
错误
,
跳过
错误
继续执行
导致数据库表的缺失。跨平台
错误
的操作如下:如果都是win下...
my
sql
从库
跳过
当前节点,
跳过
或替代执行异常的
SQL
语句
跳过
或替代执行异常的
SQL
语句
本文介绍了如何使用 DM 来处理异常的
SQL
语句
。目前,TiDB 并不完全兼容所有的 My
SQL
语法(详见 TiDB 已支持的 DDL
语句
)。当使用 DM 从 My
SQL
迁移数据到 TiDB 时,如果 TiDB 不支持...
MS-SQL Server
34,838
社区成员
254,631
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章