-
SQLServer游标的介绍与使用
游标概念数据库操作中我们常常会遇到这样情况,即从某一结果集中逐一地读取一条记录。那么如何解决这种问题呢?游标为我们提供了一种极为优秀的解决方案...
数据库操作教程 2022-09-23 16:42:24 -
行转列之SQLSERVERPIVOT与用法详解
在数据库操作中,有些时候我们遇到需要实现“行转列”的需求,例如一下的表为某店铺的一周收入情况表:WEEK_INCOME(WEEKVARCHAR(10),INCOMEDECIMAL)我们先插入一些模拟数据:INSERTINTOWEEK_INCOMESELECT'星期一',1000UNIONALLSELECT'星期二',2000UNIONALLSELECT'星期三',3000UNIONALLSELECT'星期四',4000UNIONALLSELECT'星期五',5000UNIONALLSELECT'星期六',6000UNIONALLSELECT'星期日',7000一般我们最经常使用的查询是查询一周中每天或某几天的收入,例如查询周一至周日全部的收入:SELECTWEEK,INCOMEFROMWEEK_INCOME得到如下的查询结果集:WEEK INCOME星期一 &nbs...
数据库操作教程 2022-09-23 16:42:24 -
SQLSERVER2012数据库自动备份的方法
为了防止数据丢失,这里给大家介绍SQLSERVER2012数据自动备份的方法:一、打开SQLSERVER2012,如图所示:服务器类型:数据库引擎;服务器名称:127.0.0.1(本地),也可以选择远程连接;身份验证:包含Windows身份验证和SQLServer身份验证,此处选择Windows身份验证;二、如图,选择【管理】-->【维护计划】-->【维护计划向导】:三、在【SQLSERVER维护计划向导】界面,点击【下一步】: 四、填写如图所示:名称和说明,点击【更改】: 五、在【新建作业计划】界面,选择数据库备份的频率,如图,然后确定:计划类型:重复执行;频率执行:每周(每天、每月);每天频率:时间自行选择;持续时间:开始时间默认当前时间,结束时间可以不填;六、如图,显示当前计划属性:七、此处选择【备份数据库(完整)】,然后【下一步】:八、如果有多个数据库同时备份,这里可以选择执行顺序,此处默认一个: 九、选择要备份的数据库(可以多选):十、选择数据库备份的目录: 十一、选择报告文件对应的目录: 十二、在【完成该向导】界面,可以看到设置备份的详细信息:十三、到此,...
数据库操作教程 2022-09-23 16:42:20 -
SQLServer中查询结果超出了查询时间范围解决方法
废话少说,直接上SQL代码(有兴趣的测试验证一下),下面这个查询语句为什么将2008-11-27的记录查询出来了呢?这个是同事遇到的一个问题,个人设计了一个例子。USEAdventureWorks2014;GOSELECT*FROM[Person].[Person]WHEREModifiedDate>='2008-11-2600:00:00:000'ANDModifiedDate<='2008-11-2623:59:59.999' 其实如果细看过文档的话,应该知道是什么原因,因为数据类型Datetiem的时间范围:00:00:00到23:59:59.997,最后部分的范围为0~997,官方文档提示,datetime的秒的小数部分精度的有舍入,具体请见下面datetime秒的小数部分精度的舍入如下表所示,将datetime值舍入到.000、.003、或.007秒的增量...
数据库操作教程 2022-09-23 16:42:20 -
SQLServer正确删除Windows认证用户的方法
前言在SQLServer数据库中,有时候会建立一些Windows认证的账号(域账号),例如,我们公司习惯给开发人员和Support同事开通NT账号权限,如果有离职或负责事宜变更的话,那么要如何正确的删除这些Windows认证账号呢?这篇文章就是来探讨一下如何正确的删除Windows认证账号。如下所示:下面这种方式,仅仅是删除登录名(login),然而并没有删除用户(User)USE[master]GODROPLOGIN[xxxxxxx]GO你删除登录名的时候,就会遇到类似下面的告警信息:Deletingserverloginsdoesnotdeletethedatabaseusersassociatedwiththelogins.Tocompletetheprocess,deletetheusersineachdatabase.Itmaybenecessarytofirsttransfertheownershipofschemastonewusers.也就是说,虽然你删除了登录名,但是对应用户数据库或系统数据库相关的User权限并没有清理,在SQLServer中登录名(ServerLo...
数据库操作教程 2022-09-23 16:42:18 -
SQLServer数据库调整表中列的顺序操作方法及遇到问题
SQLServer数据库中表一旦创建,我们不建议擅自调整列的顺序,特别是对应的应用系统已经上线,因为部分开发人员,不一定在代码中指明了列名。表是否可以调整列的顺序,其实可以自主设置,我们建议在安装后设置为禁止...
数据库操作教程 2022-09-23 16:42:18 -
SQLSERVER日志进行收缩的图文教程
前言最近经历了一次服务器SQLSERVER数据库服务器端事务日志爆满,导致服务器数据库写入不进数据的宕机事件,经过此次事件的发生,奉劝各位同仁一句,如果没有绝对的充足存储空间,数据库事务日志文件千万不要采取完整备份,备份出的数据量是你无法承受的,简单备份就可以了,以下是收缩数据库事务日志的操作,希望可以帮助到大家!数据库事务日志收缩通过图形界面进行操作如下:第一步:右键数据库属性第二步:更改数据库恢复模式,将模式从“完整”改为“简单”第三步:右键数据库,“任务”->“收缩”->“文件” 第四步:收缩数据库日志,选择文件类型“日志”,并将收缩操作内的,“将文件收缩到”最小大小 注意:如若磁盘空间已满,无法进行收缩数据库事务日志文件,可采取先分离出部分暂未使用的数据库,然后将MDF文件及LDF文件进行拷贝到其他空余盘,进行释放磁盘空间,待日志收缩后,再次将分离出的数据库文件进行附加。分离数据库操作,右键单击选择“任务”—>“分离”如下图:总结以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持...
数据库操作教程 2022-09-23 16:42:12 -
SqlServer中批量update语句
现在我有两张表分别是S_PERSON,S_USERS_PERSON S_USER我现在想把S_USER表中的ACCOUNT批量修改成S_PERSON的ACCOUNT我们可以发现S_USER表中有个跟S_PERSON表关联的字段那就是PERSON_ID这也是我们要update的条件找到这个关系以后我们就不难写sql了updateS_USER setaccount=p.accountfromS_PERSON pwherep.id=S_USER.person_id;结果为:sqlserveras语法举例1、使用表名称别名有两个表分别是:"Persons"和"Product_Orders"。分别为它们指定别名"p"和"po"...
数据库操作教程 2022-09-23 16:42:12 -
SQLServer中row_number函数的常见用法示例详解
一.SQLServerRow_number函数简介ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数。行号以每个分区中第一行的行号开头...
数据库操作教程 2022-09-23 16:42:08 -
SQL中的leftjoinrightjoin
以下是它们的共同点:1.关于左右表的概念。左表指的是在SQL语句中排在leftjoin左边的表,右表指的是排在leftjoin右边的表...
数据库操作教程 2022-09-23 16:42:06 -
SQLServer开窗函数Over()代替游标的使用详解
前言:今天在优化工作中遇到的sql慢的问题,发现以前用了挺多游标来处理数据,这样就导致在数据量多的情况下,需要一行一行去遍历从而计算需要的数据,这样处理的结果就是数据慢,容易卡死。语法介绍:1、与Row_Number()函数结合使用,对结果进行排序,这个是我们使用的非常多的 2、与聚合函数结合使用,利用over子句的分组和排序,对需要的数据进行操作例如:SUM()Over()累加值、AVG()Over()平均数MAX()Over()最大值、MIN()Over()最小值具体介绍:下面模拟工作中通过开窗函数代替游标的例子,通过期初余额与单据的预收金额、应收金额、实收金额来计算截止本单的期末余额,在以往就是通过游标一行一行去遍历,计算需要的期末余额,现在使用SUM()Over()来代替,最终要实现的效果图如下:第一行表示标题;第二行表示客户,是一行空行;第三行是期初余额,只显示期末余额的数据,第四至第六行表示的是每种单据的余额情况,并逐步汇总当前行的期末余额数据;最后一行表示的是对客户的合计...
数据库操作教程 2022-09-23 16:42:05 -
SQLServer使用joinall优化or查询速度
比如:,master,test,表示该用户为test的下级代码,test登录后可以看到test名下的业务和所有下级代理的业务。相关表的结构如下:user表大约10万条记录|-uid-|-user-|----site------||1|test|,master,||2|user|,master,test,|product表大约30万条记录|-pid-|-product-|-puser-||1|order01|test||2|order02|user||3|order03|user|优化前的SQL语句如下:select*fromproductaspleftjoinuserasuonp.puser=u.userwhereuser='test'orsitelike'%,test,%'不使用or单独查询时,都不超过100毫秒,排除索引的问题...
数据库操作教程 2022-09-23 16:42:03