代码改变世界

随笔分类 -  SQLSERVER

oracle的乐观锁和悲观锁

2015-10-08 16:37 by 默念默, 3080 阅读, 收藏, 编辑
摘要: 一、问题引出1.假设当当网上用户下单买了本书,这时数据库中有条订单号为001的订单,其中有个status字段是’有效’,表示该订单是有效的;2.后台管理人员查询到这条001的订单,并且看到状态是有效的;3.用户发现下单的时候下错了,于是撤销订单,假设运行这样一条SQL: update order_t... 阅读全文

MySQL "replace into" 的坑

2014-10-09 17:00 by 默念默, 36839 阅读, 收藏, 编辑
摘要: MySQL 对 SQL 有很多扩展,有些用起来很方便,但有一些被误用之后会有性能问题,还会有一些意料之外的副作用,比如 REPLACE INTO。比如有这样一张表:CREATE TABLE `auto` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT... 阅读全文

表变量和临时表

2014-07-15 11:24 by 默念默, 246 阅读, 收藏, 编辑
摘要: 表变量存储在内存中,而临时表存储在tempdb中,会涉及到物理IO读写,那么我们是否可以由此得出结论,使用表变量要比使用临时表效率高呢?相信有一部分人会和我有同样的想法,使用表变量的效率高,真是如此吗?先从一次优化存储过程的经历说起。 存储过程涉及到两个表,一个是用户今日积分表@tableUserS... 阅读全文

复合索引介绍

2014-05-27 14:42 by 默念默, 1106 阅读, 收藏, 编辑
摘要: 什么是复合索引1.1复合索引定义索引可以包含一个、两个或更多个列。两个或更多个列上的索引被称作复合索引。利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引不同于使用两个单独的索引。复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人... 阅读全文

无法打开物理文件 "c:/dinner.mdf"。操作系统错误 5:"5(拒绝访问。)"。

2012-09-08 17:59 by 默念默, 365 阅读, 收藏, 编辑
摘要: 今天用SQLSERVER2008附加数据库出现"无法打开物理文件 "c:/dinner.mdf"。操作系统错误 5:"5(拒绝访问。)"。解决方法:不用sa用户附加,重新连接数据库,选中windows集成验证模式,ok希望遇到此问题的同学参考! 阅读全文

SQL Server 中的嵌套事务与@@TranCount(转)

2012-08-24 16:10 by 默念默, 2137 阅读, 收藏, 编辑
摘要: 在处理事务的时候,一般都用RollBack Transaction来回滚,但是如果在嵌套事务中这样使用的话,就会出现错误。在SqlServer里,嵌套事务的层次是由@@TranCount全局变量反映出来的。每一次Begin Transaction都会引起@@TranCount加1。而每一次Commit Transaction都会使@@TranCount减1,而RollBack Transaction会回滚所有的嵌套事务包括已经提交的事务和未提交的事务,而使@@TranCount置0。例如:Begin Transaction -- @@TranCount = 1 BeginTr... 阅读全文

SQL中列转行

2012-05-23 14:09 by 默念默, 1747 阅读, 收藏, 编辑
摘要: 表结构: 结果: 最近在项目中的一个列转行问题,在这里记录下来!遇到这个问题的园友修改修改可以直接拿走!!View Code create table #tempzjl (realname varchar(50),hour2 INT default(0),connectcount INT default(0)) insert into #tempzjlselect [RealName] as [RealName],datepart(hh,ConnectTime) as hour2,COUNT(isnull(ConnectTime,0)) as ConnectCount f... 阅读全文

容易遗忘のSQL

2011-12-06 16:17 by 默念默, 593 阅读, 收藏, 编辑
摘要: 1:时间函数:知识点:DATEDIFF() 函数返回两个日期之间的天数,DATEDIFF(datepart,startdate,enddate),startdate 和 enddate 参数是合法的日期表达式。 datepart 是将为其返回 integer 的 date(日期或时间值)的一部分.比如年、月、日、小时、分钟等等。查询入职的年数select FName,FIndate,DateDiff(year,FinDate(入职时间字段),Getdate()) from T取出每年入职的员工个数 按照入职的年数分组然后在输出个数:第一种写法:select datediff(year,FInD 阅读全文

@@identity与scope_identity()函数的区别

2011-11-03 10:00 by 默念默, 313 阅读, 收藏, 编辑
摘要: @@IDENTITY 将返回在当前会话中的任何作用域内插入的最后一个标识列的值,SCOPE_IDENTITY() 将返回在 T1 中插入的 IDENTITY 值。这是在同一个作用域内发生的最后的插入! 在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值。如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL。如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值。如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操作,那么,在语句执行后立即调用 @@IDE.. 阅读全文

扩展性很好的一个分页存储过程

2011-11-01 10:07 by 默念默, 525 阅读, 收藏, 编辑
摘要: 这是经常用的一个分页存储过程 希望大家指点不足USE [a6756475746]GO/****** Object: StoredProcedure [dbo].[tbl_order_SearchWhereAndPage] Script Date: 11/01/2011 09:37:39 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[tbl_order_SearchWhereAndPage] @AllCount int OUTPUT, @PageIndex int, @PageS... 阅读全文

mssql中的标量值函数和表函数的用法

2011-09-15 17:54 by 默念默, 2314 阅读, 收藏, 编辑
摘要: 标量函数 所谓标量函数指的就是此函数只返回一个值。表值函数返回值是一个表。聚合函数是在select语句中使用的,用来聚合一个结果集, 类似于Sum()或是Count()等内置的函数,而且真正的自定义聚合函数目前只能用CLR来实现。 创建标量值函数: create FUNCTION [dbo].[mytest]() RETURNS varchar(60) AS BEGIN declare @uu varchar(60) set @uu='中国历史' return @uu END 调用方法: print dbo.mytest() 带参数的: create FUNCTION myte 阅读全文

sql CHARINDEX函数

2011-09-06 00:26 by 默念默, 232 阅读, 收藏, 编辑
摘要: CHARINDEX函数返回字符或者字符串在另一个字符串中的起始位置。CHARINDEX函数调用方法如下:CHARINDEX ( expression1 , expression2 [ , start_location ] )Expression1是要到expression2中寻找的字符中,start_location是CHARINDEX函数开始在expression2中找expression1的位置。CHARINDEX函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置。假如CHARINDEX没有找到要找的字符串,那么函数整数“0”。让我们看看下面的函数命令执行的结果: CHARI 阅读全文

SQL利用Case When Then多条件判断

2011-02-23 10:01 by 默念默, 460 阅读, 收藏, 编辑
摘要: CASEWHEN 条件1 THEN 结果1WHEN 条件2 THEN 结果2WHEN 条件3 THEN 结果3WHEN 条件4 THEN 结果4.........WHEN 条件N THEN 结果NELSE 结果XENDCase具有两种格式。简单Case函数和Case搜索函数。--简单Case函数CASE sexWHEN '1' THEN '男'WHEN '2' THEN '女'ELSE '其他' END--Case搜索函数CASE WHEN sex = '1' THEN '男'WHE 阅读全文

【转】数据库查询优化原则

2011-01-10 17:25 by 默念默, 384 阅读, 收藏, 编辑
摘要: 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=03.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导 阅读全文

动态的SQL分页

2010-10-14 10:47 by 默念默, 413 阅读, 收藏, 编辑
摘要: alter procedure sp_aspnetpage@curpage int, @tablename varchar(50),--输入参数@count int output,--输出参数@order varchar(10),@key varchar(10),@pagesize int=2,@condition varchar(2000)='1=1'asbeginset nocount on--设置开始行号declare @start_row_num intset @start_row_num=(@curpage-1)*@pagesize--设置动态sql语句declare 阅读全文