SQL 备忘录
摘要:查看一个字段前后变更前跟变更后的值 UPDATE tb SET 字段1='0' OUTPUT DELETED.字段1,INSERTED.字段1WHERE id='1' 字段拼接 1传统写法: DECLARE @OrderCode VARCHAR(MAX)='';SELECT @OrderCode+=
阅读全文
row_number,rank,dense_rank,ntile排名函数的用法
摘要:这篇文章介绍SQL中4个很有意思的函数,我称它的行标函数,它们是row_number,rank,dense_rank和ntile,下面分别进行介绍。一 row_number:它为数据表加一个叫“行标示”的列,它在数据表中是连续的,我们必须按着某个顺序把表排序之后,才能使用row_number,看下...
阅读全文
Sql Server2005新特性及性能
摘要:举几个例子来简单说明 这些例子我引用了Northwind库。 1. TOP 表达式 SQL Server 2000的TOP是个固定值,是不是觉得不爽,现在改进了。--前n名的订单declare@nint set@n=10 selectTOP(@n)*fromOrders 2. 分页 不知各位过去用S...
阅读全文
关于update set from where
摘要:下面是这样一个例子:两个表a、b,想使b中的memo字段值等于a表中对应id的name值 表a:id,name 1 王 2 李 3 张 表b:id,ClientName 1 2 3(MS SQL Server)语句:update b set ClientName = a.name from a,b where a.id = b.id(Oralce)语句:update b set (ClientName) = (SELECT name FROM a WHERE b.id = a.id)(Mysql)语句:: ...
阅读全文
sqlserver中All、Any和Some用法与区别
摘要:SQLServer中有三个关键字可以修改比较运算符:All、Any和Some,其中Some和Any等价。他们作用于比较运算符和子查询之间,作用类似Exists、not exists、in、not in以及其他逻辑意义,这些语法同样被SQLServer2000支持但是很少看到有人用它们。官方参考文:http://technet.microsoft.com/zh-cn/library/ms187074%28SQL.90%29.aspx(建议阅读) 1 set nocount on 2 3 use tempdb 4 go 5 6 if (object_id ('t1') is not
阅读全文
SQL in与exists的执行效率比较
摘要:SQL中in可以分为三类: 形如select * from t1 where f1 in ('a','b'),应该和以下两种比较效率:select * from t1 where f1='a' or f1='b' 或者 select * from t1 where f1 ='a' union all select * from t1 f1='b',你可能指的不是这一类,这里不做讨论。 形如select * from t1 where f1 in (select f1 from t2 where t2
阅读全文
SQLServer数据集合的交、并、差三种集合运算
摘要:SQLServer2005通过intersect,union,except和三个关键字对应交、并、差三种集合运算。他们的对应关系可以参考下面图示相关测试实例如下:use tempdb goif(object_id('t1') is not null) drop table t1if(object_id('t2') is not null) drop table t2gocreate table t1 (a int)insert into t1 select 1 union select 2 union select 3create table t2 (a int
阅读全文
SQL语句优化技术分析
摘要:最近几周一直在进行数据库培训,老师精湛的技术和生动的讲解使我受益匪浅。为了让更多的新手受益,我抽空把SQL语句优化部分进行了整理,希望大家一起进步。一、操作符优化1、IN 操作符用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。由此可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组
阅读全文
高并发下的获取ID解决方案
摘要:/****** 第一种解决方案:锁+事务 保证原子性 ******/ begin transaction; declare @sn bigint; select top 0 id from IDS with (tablockx); set @sn=isnull(IDENT_CURRENT('IDS'),IDENT_INCR('IDS')) + {0}; DBCC CHECKIDENT ('IDS', RESEED, @sn);...
阅读全文
获取数据库里面所有自增类型的最大值
摘要:declare @maxId intset @maxId=0;DECLARE @TempREFER TABLE(tablename varchar(100),colname varchar(100))INSERT @TempREFER(tablename,colname) select d.name...
阅读全文