-
SQLServer异常代码处理的深入讲解
前言SQLServer使用TRY...CATCH结构实现TSQL语句的错误处理,TRY命令负责监控语句执行的情况,如果有TSQL语句发生异常,并且严重级别(SeverityLevel)大于10,并且小于20,那么CATCH命令会捕获到异常的错误。BEGINTRY{sql_statement|statement_block}ENDTRYBEGINCATCH[{sql_statement|statement_block}]ENDCATCH数据库开发工程师需要把一条或多条语句写入到TRY代码块中,如果TRY代码块中的代码在执行过程中发生错误,那么在错误发生的点之后的代码不再执行,程序的控制权转移到CATCH代码块块中...
数据库操作教程 2022-09-23 18:22:33 -
SQLServer学习笔记之事务、锁定、阻塞、死锁用法详解
本文实例讲述了SQLServer学习笔记之事务、锁定、阻塞、死锁用法。分享给大家供大家参考,具体如下:1、事务隐式事务/*==================================================================当以create,drop,fetch,open,revoke,grand,altertable,select,insert,delete,update,truncatetable语句首先执行的时候,SQLServer会话自动打开一个新的事务,如果在会话中激活了隐式事务模式,那么这个事务会一直保持打开状态,直到rollback或commit语句这个事务才结束,如果忘记提交事务,那么在相应的隔离级别下,事务占用的锁可能不会释放,因此尽量不要用隐式事务...
数据库操作教程 2022-09-23 18:22:17 -
SqlServer在事务中获得自增ID的实例代码
SqlServer在事务中获得自增ID实例代码在sqlserver中插入数据时,如何返回自增的主键ID,方式有很多,这里提供一种。代码如下:USEtempdbgoCREATETABLEtable1(idINT,employeeVARCHAR(32))goINSERTINTOtable1VALUES(1,'one')INSERTINTOtable1VALUES(2,'two')INSERTINTOtable1VALUES(3,'three')INSERTINTOtable1VALUES(4,'four')GOCREATETABLEtable2(idINTIDENTITY(1,1),employeeVARCHAR(32))GO--=================================--用OUTPUT把ID插入@MyTableVar--=================================DECLARE@MyTableVarTABLE(idINT)INSERTINTOtable2(employee)OUTPUTINSERTED.idINTO@MyTabl...
数据库操作教程 2022-09-23 18:21:06 -
Sqlserver事务备份和还原的实例代码(必看)
废话不多说,直接上代码createdatabasemydbusemydbgocreatetableaccount(idvarchar(16),namevarchar(16),balancefloat)goselect*fromaccountinsertintoaccount(id,name,balance)values('620101','liyong',300)insertintoaccount(id,name,balance)values('620106','mali',400)--insertintoaccount(id,name,balance)values('620009','chenying',800)insertintoaccount(id,name,balance)values('646009','chenying',800)--deletefromaccountwhereid='620009'goupdateaccountsetbalance=balance-1000whereid='620101'updateaccountsetbalance=balance+100...
数据库操作教程 2022-09-23 18:20:38 -
sqlserver分页查询处理方法小结
sqlserver2008不支持关键字limit,所以它的分页sql查询语句将不能用MySQL的方式进行,幸好sqlserver2008提供了top,rownumber等关键字,这样就能通过这几个关键字实现分页。下面是本人在网上查阅到的几种查询脚本的写法:几种sqlserver2008高效分页sql查询语句top方案:sqlcode:selecttop10*fromtable1whereidnotin(selecttop开始的位置idfromtable1)max:sqlcode:selecttop10*fromtable1whereid>(selectmax(id)from(selecttop开始位置idfromtable1orderbyid)tt)row:sqlcode:select*from(selectrow_number()over(orderbytempcolumn)temprownumber,*from(selecttop开始位置+10tempcolumn=0,*fromtable1)t)ttwheretemprownumber>开始位置3种分页方式,分别是ma...
数据库操作教程 2022-09-23 18:19:19 -
sql分组后二次汇总(处理表重复记录查询和删除)的实现方法
--处理表重复记录(查询和删除)/******************************************************************************************************************************************************1、Num、Name相同的重复值记录,没有大小关系只保留一条2、Name相同,ID有大小关系时,保留大或小其中一个记录整理人:中国风(Roy)日期:2008.06...
数据库操作教程 2022-09-23 18:14:54 -
SqlServer中模糊查询对于特殊字符的处理方法
今天在处理sql查询的时候遇到了like查询不到的问题,于是对问题进行剖析问题:select*fromv_workflow_rt_task_circulatewhereNamelike'%[admin]请假申请[2017-02-13至2017-02-13]%'查询不到,但是在数据库中是存在在这一条数据的。修改后:select*fromv_workflow_rt_task_circulatewhereNamelike'%[[]admin]请假申请[[]2017-02-13至2017-02-13]%'对于模糊查询需要对于特殊字符的处理(下划线_,百分号%,方括号[,尖号^)对了以上的字符直接使用方括号包起来([])例如:[_]、[%]、[[]、[^]...
数据库操作教程 2022-09-23 18:14:14 -
SQLServer误设置maxservermemory的处理方法
昨天网上一网友说,由于他同事误将“maxservermemory”设置为10M后,SQLServer数据库登录不了,当时我简单测试了一下,今天有空就顺手将整个过程整理一下,记录在此。在SSMS的UI界面设置“maxservermemory”,即使你设置为10M大小,但是它会“悄悄”默认修改为128M,你用Profile跟踪或者设置后会发现,它偷偷“修改”了你的设置值(改为了128M),EXECsys.sp_configureN'maxservermemory(MB)',N'128'GORECONFIGUREWITHOVERRIDEGOConfigurationoption'maxservermemory(MB)'changedfrom4096to128.RuntheRECONFIGUREstatementtoinstall.如果你没有注意这些细节,或者不信这个事情,那么也可以用脚本测试一下,如下所示,它提示你这个值(10M)不是一个有效值...
数据库操作教程 2022-09-23 18:14:01 -
SQLServer数据库中开启CDC导致事务日志空间被占满的原因
SQLServer中开启CDC之后,在某些情况下会导致事务日志空间被占满的现象为:在执行增删改语句(产生事务日志)的过程中提示,Thetransactionlogfordatabase'***'isfulldueto'REPLICATION'(数据库“***”的事务日志已满,原因为“REPLICATION”).CDC以及复制的基本原理粗略地讲,对于日志的使用步骤如下: 1,每当基础表(开启了CDC或者replication的表)产生事务性操作(增删改)之后,对应的事务日志写入日志文件, 2,此时的日志被状态被标记为Replication,也即处于待复制状态,这个活动状态跟数据库的还原模式无关,即便是简单还原模式, 3,然后有后台进程来读取这个日志,根据事务日志的内存写入目标表, 这个目标对于cdc来说是记录数据变化的系统表, 对于replication来说是写入distribution这个库 4,步骤3完成之后,事务日志被标记为正常状态,如果是简单还原模式,被后台进程解析过的事务日志被截断,可以重用如果上述中间的第三个步骤出现问题,也即后台进程无法解析日志后释放可用...
数据库操作教程 2022-09-23 18:10:32 -
SQLServer并发处理存在就更新解决方案探讨
前言本节我们来讲讲并发中最常见的情况存在即更新,在并发中若未存在行记录则插入,此时未处理好极容易出现插入重复键情况,本文我们来介绍对并发中存在就更新行记录的七种方案并且我们来综合分析最合适的解决方案。探讨存在就更新七种方案首先我们来创建测试表IFOBJECT_ID('Test')ISNOTNULLDROPTABLETestCREATETABLETest(Idint,Namenchar(100),[Counter]int,primarykey(Id),unique(Name));GO解决方案一(开启事务)我们统一创建存储过程通过来SQLQueryStress来测试并发情况,我们来看第一种情况...
数据库操作教程 2022-09-23 18:10:19 -
Mysql用户忘记密码及密码过期问题的处理方法
忘记密码:步骤一:现在找到MySQL的安装目录,改掉安装目录的my-default.ini名称为my.ini(D:Mysqlmysql-5.7.13-winx64);步骤二:在my.ini文件最后一行加上skip-grant-tables 并保存(这是去掉安全检查);步骤三:在服务中重启MySQL服务;步骤四:cmd命令进入Mysql安装bin目录下输入mysql-uroot-p,按回车;(这里是以账号root为例子)步骤五:会出现‘Enterpassword',再按下回车,此时进入mysql>;步骤六:输入命令‘usemysql'回车,再输入修改密码sql语句:updateusersetpassword=password("new_pass")whereuser="root";然后将my.ini文件中的skip-grant-tables去掉,然后重启mysql,就OK了。注意:如果是MySQL5.7.13版本,会报ERROR1054(42S22):Unknowncolumn‘password'in‘fieldlist'这样的error;这样我们将sql语句改为:upd...
数据库操作教程 2022-09-23 18:06:51 -
SQLServer触发器和事务用法示例
本文实例讲述了SQLServer触发器和事务用法。分享给大家供大家参考,具体如下:新增和删除触发器altertriggertri_TCont_cforINSERT,deleteasbeginsetXACT_ABORTONdeclare@INSERTCOUNTint;declare@DELETECOUNTint;declare@UPDATECOUNTint;set@INSERTCOUNT=(selectCOUNT(*)frominserted);set@DELETECOUNT=(selectCOUNT(*)fromdeleted);set@UPDATECOUNT=()if(@INSERTCOUNT>0)begininsertintot_c2select*frominserted;endelseif(@DELETECOUNT>0)begindeletet_c2whereexists(selecttemp.cidfromdeletedtempwheretemp.cid=t_c2.cid);endend更新触发器和事务事务主要用在数据的保护,在多表更新时,事务保存所有事务下的更新语...
数据库操作教程 2022-09-23 18:01:52