上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 28 下一页
摘要: 变量对于某一种语言是必不可少的一部分,当然对于T-SQL来讲也是一样,在简单查询中,但是对于复杂的查询或存储过程中,变量都是必不可少的一部分。和高级语言一样,在T-SQL中,变量按生存范围可以分为全局变量(Global Variable)和局部变量(Local Variable)1、全局变量时有系统定义的,在整个SQL Server实例内都能访问到的变量,全部变量以@@作为第一个字符,用户只能访问,不能赋值。2、局部变量由用户定义,生命周期只在一个批处理内有效。局部变量以@作为第一个字符,由用户自己定义和赋值。一个简单的例子如下: 因为全局变量仅仅是用于读取系统的一些参数,具体每个全局变量所. 阅读全文
posted @ 2012-01-31 16:34 指尖流淌 阅读(1175) 评论(0) 推荐(0) 编辑
摘要: 和其他高级语言一样,T-SQL中也有用于控制流程的语句。T-SQL中的流程控制语句进一步扩展了T-SQL的力量....使得大部分业务逻辑都可以用在数据库层里面进行。但很多对于T-SQL中的流程控制语句并没有系统的了解 在没有流程控制语句的情况下,T-SQL语句是按照从上到下的顺序逐个执行;使用流程控制语句可以让开发人员可以基于某些逻辑进行选择性的跳转,实现了类似高级语言的跳转结构流程控制语句的使用范围和Go关键字 流程控制语句只能在单个批处理段(Batch),用户自定义函数和存储过程中使用。不能跨多个批处理段或者用户自定义函数和存储过程。 一个批处理段是有一个或者多个语句组成的一个批处理,之. 阅读全文
posted @ 2012-01-31 15:28 指尖流淌 阅读(1129) 评论(0) 推荐(0) 编辑
摘要: T-SQL不仅仅是一个用于查询数据库的语言,还是一个可以对数据进行操作的语言。基于列的case表达式就是其中一种,不像其他查询语言可以互相替代(比如用子查询实现的查询也可以使用join来实现),case表达式在控制基于列的逻辑表达式大部分是无法替代的。 基于列的逻辑表达式,其实就是case表达式,可以用在select,update,delete,set以及in,where,order by和having子句之后。由于这里讲的是T-SQL查询,所以只说到case表达式在select子句和order by子句中的使用。 case表达式实现的功能类似编程语言中的if....then....else. 阅读全文
posted @ 2012-01-31 12:29 指尖流淌 阅读(625) 评论(0) 推荐(0) 编辑
摘要: SQL有着非常强大且灵活的查询方式,而多表连接操作往往也可以用子查询进行替代,子查询本质上是嵌套进其他select,update,insert,delete语句的一个被限制的select语句,在子查询中,只有下面几个子句可以使用1、select子句(必须)2、from子句(必须)3、where子句(可选)4、group by(可选)5、having(可选)6、order by(只有在top关键字被使用时才可用)子查询可以嵌套在其他子查询中,这个嵌套最多可以达到32层。子查询也叫内部查询(inner query)或者内部选择(innder select),而包含子查询的查询语句也叫外部查询(o. 阅读全文
posted @ 2012-01-29 22:41 指尖流淌 阅读(12753) 评论(0) 推荐(1) 编辑
摘要: sql server 2008提供了一个增强的Sql命令Merge,用法参看MSDN。能根据两张表数据的不同,对两张表进行数据执行插入,更新或删除等操作,一般用在数据的抽取,例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两张表数据进行同步。看例子,假如,有一总产品列表,一个分店产品列表,需要从分店添加产品时更新产品列表。总产品表,分店产品表结构完全一致:if OBJECT_ID('Demo_AllProducts')is not null drop table Demo_AllProductsgoCreate table Demo_AllProducts( 阅读全文
posted @ 2012-01-29 18:35 指尖流淌 阅读(444) 评论(0) 推荐(0) 编辑
摘要: 在SQL Server 2008中新增功能,可以使用单个insert命令插入多行举例:CREATE TABLE [dbo].[test2]( [编号] [int] NULL, [姓名] [varchar](20) NULL, [一季度] [int] NULL, [二季度] [int] NULL, [三季度] [int] NULL, [四季度] [int] NULL) insert into test2(编号,姓名,一季度,二季度,三季度,四季度)values(1,'a1',1,1,1,1),(2,'a2',2,2,2,2),(2,'a3',3,3 阅读全文
posted @ 2012-01-29 17:33 指尖流淌 阅读(370) 评论(0) 推荐(0) 编辑
摘要: SQL Server查询1、查询的时候应该尽量按照复合索引中的顺序来做条件查询;2、如果在程序中有for或者是freach,在存储过程中又有if exist,那就要看是否可以再表中加入复合索引了,if not exists可以转换为if exists来使用索引;3、在查询尽量少使用*或者全表字段来查询。第一,返回的数据集比较大;第二,产生更多的IO操作;第三,会使用到Bookmarklookup的查询计划,性能有所下降;如果能使用覆盖索引来查询是最理想的。4、下面关于查询的性能比较1、返回行数较多:索引覆盖>聚集索引>表扫描>堆积的非聚集索引>聚集的非聚集索引2、返回行 阅读全文
posted @ 2012-01-29 17:02 指尖流淌 阅读(382) 评论(0) 推荐(0) 编辑
摘要: 游标1、尽量少用游标,如果不得不用,那就要看是否可以对逻辑进行整合,分出不同的情况,让在一部分情况是使用Insert select的方式来一次性插入(注意下例中的业务分析,这个是关键)2、如果存储过程花费的时间比较长,而且无法避免使用游标,那我们就要分析系统的业务,看大部分的情况是走哪条路的,那我们对大部分会发生的事做优化,也是可以达到我们优化的目的的;(比如IXC发起的时候在insert到tb Todo表中都要先判断tbTodo是否存在数据的,那把部分情况是不存在的,那我们就一次性判断count,如果没有就使用Insert select一次性插入到tb Todo)转自http://gaiza 阅读全文
posted @ 2012-01-20 21:09 指尖流淌 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 1、查询的时候尽量按照复合索引的顺序来做条件查询,(比如IXC中spInterActiveInstance_GetByIDToStat条件and ProcessState<>99的位置)2、如果在程序中有For或者Foreach,在存储过程中又有If Exists,那么就要看是否可以再表中加入复合索引了,If Not Exists可以转换为If Exists来使用索引;3、在查询中尽量少使用*或者全表字段来查询数据。第一、返回的数据集比较大;第二,产生更多的IO操作,第三,会使得Bookmarklookup的查询计划,性能有所下降;如果能使用到覆盖索引来查询是最理想的。4、下面关于 阅读全文
posted @ 2012-01-20 21:00 指尖流淌 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 索引1、复合索引(where a and b)如果没有对a和a做单一索引,查询的时间为a;如果对a做单一索引,查询时间为b;如果对b做单一索引,查询时间为c;如果对a,b做复合索引,查询时间为d,那么时间的比较就应该是a>b=c>d;(比如spMsgreader_Distribute中使用where inforID=@infoID and UserID=@userID,插入7000次的时候就明显的看到性能了;(8秒:1:50秒)注意升序和降序的区别?)2、当高选择性的非聚集索引达到5%的选择性时,该索引时非常有用的3、关于复合索引属性列位置问题,应该把高选择性的列放在坐左边(以前就 阅读全文
posted @ 2012-01-20 20:45 指尖流淌 阅读(392) 评论(2) 推荐(0) 编辑
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 28 下一页