1.对于某些写的sql懒得判断的;

SELECT * FROM sys_part WHERE part_no =(SELECT part_no FROM dbo.sys_part)  --字查询的结果存在多行
Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

对于错误代码:512

SELECT TOP 10 * from sys.messages  WHERE message_id =512  --可以查询到一些对于此错误的不同语言描述,不用翻译了;

--对于sql中执行的sql语句记录可以用如下进行查询,不过对于上面的错误内容查询不出来.......:

SELECT TOP 100
ST.text AS '执行的SQL语句',
QS.execution_count AS '执行次数',
QS.total_elapsed_time AS '耗时',
QS.total_logical_reads AS '逻辑读取次数',
QS.total_logical_writes AS '逻辑写入次数',
QS.total_physical_reads AS '物理读取次数',
QS.creation_time AS '执行时间' ,
QS.*
FROM sys.dm_exec_query_stats QS
CROSS APPLY
sys.dm_exec_sql_text(QS.sql_handle) ST
WHERE QS.creation_time BETWEEN '2019-03-01 00:00:00' AND '2019-04-02 11:00:00'
ORDER BY
qs.creation_time DESC

2.对于语句没有异常处理的情况,多个sql写在一起抛给服务器会认为是独立的进行处理,如有异常不会终止,如下:

--没有异常捕捉的情况

PRINT 'first'

SELECT 1/0

PRINT 'second'

--执行结果:

first
Msg 8134, Level 16, State 1, Line 3
Divide by zero error encountered.
second ----异常之后的语句依然执行了

---具有异常捕捉的,异常之后的语句可以停止执行

BEGIN TRY
PRINT 'first'
SELECT 1/0
PRINT 'second'  ---此语句不会执行;
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
END CATCH

--执行结果 

first

(0 row(s) affected)
Divide by zero error encountered.

3.对于mssql中事务添加示例,尽量对于连贯的业务,如果要将逻辑写在数据库中的话,还是要采用事务的方式,防止发生异常后,数据错乱,导致问题更加验证;

-------创建需要验证的表及其数据
--CREATE TABLE temp_table
--(
-- id INT IDENTITY(1,1),
-- actymd VARCHAR(10),
-- acthms VARCHAR(10)
--)

--DECLARE @insert INT
--SET @insert=1

--WHILE(@insert <10)
--BEGIN
-- INSERT INTO dbo.temp_table
-- ( actymd, acthms )
-- VALUES (
-- '', -- actymd - varchar(10)
-- '' -- acthms - varchar(10)
-- )
-- SET @insert+=1;
--END

SELECT * FROM dbo.temp_table

--update dbo.temp_table SET actymd ='' --每次验证执行完成,将数据作还原处理

---验证事务的会滚
SET XACT_ABORT ON ---数据库这里也需要开启否则还是徒劳

DECLARE @count INT

DECLARE @indext INT

SELECT @count=COUNT(*) FROM dbo.temp_table(NOLOCK)

SET @indext =1;

BEGIN TRY

WHILE(@indext<@count)
BEGIN
IF(@indext<4) ---如果事务有效果,那么此处的设置导致temp_table只会被更新3行数据
BEGIN
SELECT 'ddd'
UPDATE temp_table SET actymd='tt' WHERE id =@indext
END
ELSE
BEGIN
BEGIN TRAN --此处进行事务执行结果如图1 --此处对应注释执行结果如图2
UPDATE temp_table SET actymd='tt_yichang' WHERE id =@indext
UPDATE temp_table SET actymd='dddddddddddddddddddddddddddd' WHERE id =@indext --此处会执行错误
COMMIT
END

SET @indext+=1;

END
END TRY
BEGIN CATCH
ROLLBACK
SELECT ERROR_MESSAGE(),ERROR_NUMBER(),@indext

END CATCH

--图1 有事务的执行结果
--id actymd acthms
--1 tt
--2 tt
--3 tt
--4
--5
--6
--7
--8
--9

--图2 没有事务的执行结果
--id actymd acthms
--1 tt
--2 tt
--3 tt
--4 tt_yichang
--5
--6
--7
--8
--9

sql中的常见报错;的更多相关文章

  1. 内置Jetty配置JSP支持过程中的常见报错

    目录 1. 常见报错及解决 1.1 JSP support not configured 1.2 JSTL标签解析 1.3 JSP编译 1.4 JSP实现依赖 1.5 EL表达式支持 2. 小结 1. ...

  2. C语言开发中常见报错的解决方案

    C语言开发中常见报错的解决方案 整理来源于网络,侵权请通知删除.*禁止转载 ---- fatal error C1003: error count exceeds number; stopping c ...

  3. web报表工具FineReport使用中遇到的常见报错及解决办法(二)

    web报表工具FineReport使用中遇到的常见报错及解决办法(二) 这里写点抛砖引玉,希望大家能把自己整理的问题及解决方法晾出来,Mark一下,利人利己. 出现问题先搜一下文档上有没有,再看看度娘 ...

  4. java常见报错及解决

    Java常见报错信息: Java 常见异常种类 Java Exception: 1.Error  2.Runtime Exception 运行时异常 3.Exception  4.throw 用户自定 ...

  5. HDFS集群常见报错汇总

    HDFS集群常见报错汇总 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.DataXceiver error processing WRITE_BLOCK operation 报 ...

  6. 03:git常见报错解决方法

    1.1 git常见报错解决方法 1.warning: LF will be replaced by CRLF in .idea/workspace.xml. 参考博客:https://www.cnbl ...

  7. JavaScript 调试常见报错以及原因

    JavaScript 调试常见报错以及原因 测试环境 chrome 版本 66.0.3359.170(正式版本) (64 位) TypeError 类型错误 不是操作符所接受的数据类型. //---- ...

  8. Django 连接 MySQL 数据库及常见报错解决

    目录 Django 连接 MySQL数据库及常见报错解决 终端或者数据库管理工具连接 MySQL ,并新建项目所需数据库 安装访问 MySQL 的 Python 模块 Django 相关配置 可能会遇 ...

  9. rsync 守护进程模式搭建 与常见报错

    守护进程模式搭建 1.环境准备 2.安装rsync(做备份的服务器都安装) [root@backup ~]# yum install -y rsync 3.服务端配置 [root@backup ~]# ...

随机推荐

  1. 洛谷 4115 Qtree4——链分治

    题目:https://www.luogu.org/problemnew/show/P4115 论文:https://wenku.baidu.com/view/1bc2e4ea172ded630b1cb ...

  2. node.js 远程调试debug产线环境代码

    一.背景: 产线机器出bug,不能重启服务,需要保留现场,问题不好排查,只能靠远程debug. 二.实现步骤 1. 登录远程机器执行如下命令,nodePid为node服务的pid kill -usr1 ...

  3. ajax高级操作

    $('#ajax_submit').click(function () { $.ajax({ 'url':'/app_ajax', 'type':'post', 'data':$("#f1& ...

  4. Linux下MySQL编码的修改

    默认登录mysql之后可以通过SHOW VARIABLES语句查看系统变量及其值. mysql> show variables like '%character%';   说明:以下是在Cent ...

  5. MongoDB分片(Sharding)技术

    分片(sharding)是MongoDB用来将大型集合分割到不同服务器(或者说一个集群)上所采用的方法.尽管分片起源于关系型数据库分区,但MongoDB分片完全又是另一回事. 和MySQL分区方案相比 ...

  6. Anaconda安装及配置

    简介 Anaconda(官方网站)指的是一个开源的Python发行版本,可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本.Anaconda包含了conda.Python在内的超过18 ...

  7. 打造高效的工作环境 – SHELL 篇

    注:本文由雷俊(Javaer/Emacser)和我一起编辑,所以文章版权归雷俊与我共同所有,转载者必需注明出处和我们两位作者.原文最早发于酷壳微信公众号,后来我又做了一些修改,再发到博客这边. 程序员 ...

  8. SAS-决策树模型

    决策树是日常建模中使用最普遍的模型之一,在SAS中,除了可以通过EM模块建立决策树模型外,还可以通过SAS代码实现.决策树模型在SAS系统中对应的过程为Proc split或Proc hpsplit, ...

  9. Git操作相关记录

    1. 本地更新fork来的项目,与原项目同步更新 git remote add upstream <origin_repo_addr> git remote -v git fetch up ...

  10. 关于mysql文件导入提示“Variable @OLD_CHARACTER_SET_CLIENT can't be set to the value of @@CHARACTER_SET_CLIENT”问题分析

    今天用myssqldump导出数据,然后再导入另外mysql数据库时,提示Variable @OLD_CHARACTER_SET_CLIENT can't be set to the value of ...