上一页 1 ··· 36 37 38 39 40 41 42 43 44 ··· 56 下一页
摘要: 概述游标是邪恶的!在关系数据库中,我们对于查询的思考是面向集合的。而游标打破了这一规则,游标使得我们思考方式变为逐行进行.对于类C的开发人员来着,这样的思考方式会更加舒服。正常面向集合的思维方式是:而对于游标来说:这也是为什么游标是邪恶的,它会使开发人员变懒,懒得去想用面向集合的查询方式实现某些功能.同样的,在性能上,游标会吃更多的内存,减少可用的并发,占用宽带,锁定资源,当然还有更多的代码量……从游标对数据库的读取方式来说,不难看出游标为什么占用更多的资源,打个比方:当你从ATM取钱的时候,是一次取1000效率更高呢,还是取10次100?既然游标这么“邪恶”,为什么还要学习游标我个人认为存在 阅读全文
posted @ 2012-09-18 15:58 左正 阅读(1207) 评论(0) 推荐(0)
摘要: 简介 对于SELECT查询语句来说,通常情况下,为了使T-SQL代码更加简洁和可读,在一个查询中引用另外的结果集都是通过视图而不是子查询来进行分解的.但是,视图是作为系统对象存在数据库中,那对于结果集仅仅需要在存储过程或是用户自定义函数中使用一次的时候,使用视图就显得有些奢侈了. 公用表表达式(Common Table Expression)是SQL SERVER 2005版本之后引入的一个特性.CTE可以看作是一个临时的结果集,可以在接下来的一个SELECT,INSERT,UPDATE,DELETE,MERGE语句中被多次引用。使用公用表达式可以让语句更加清晰简练. 除此之外,根据微软对CT 阅读全文
posted @ 2012-09-18 15:11 左正 阅读(332) 评论(0) 推荐(0)
摘要: 最近遇到一个情况,需要在内网系统中出一个统计报表。需要根据不同条件使用多个group by语句.需要将所有聚合的数据进行UNION操作来完成不同维度的统计查看. 直到发现在SQL SERVER 2008之后引入了GROUPING SETS这个对于GROUP BY的增强后,上面的需求实现起来就简单多了,下面我用AdventureWork中的表作为DEMO来解释一下GROUPING SETS. 假设我现在需要两个维度查询我的销售订单,查询T-SQL如下: 而使用SQL SERVER 2008之后新增的GROUPING SETS语句,仅仅需要这样写: 值得注意的是,虽然上面使用GROUPING .. 阅读全文
posted @ 2012-09-18 14:57 左正 阅读(244) 评论(0) 推荐(0)
摘要: 简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能。但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索引的概念,需要了解大量原理性的知识,包括B树,堆,数据库页,区,填充因子,碎片,文件组等等一系列相关知识,这些知识写一本小书也不为过。所以本文并不会深入讨论这些主题。索引是什么 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 精简来说,索引是一种结构.在SQL Server中,索引和表(这里指的是加了聚集索引的表)的存储结构是一样的,都是B树,B树是一 阅读全文
posted @ 2012-09-18 14:41 左正 阅读(307) 评论(0) 推荐(0)
摘要: 写在前面:这是第一篇T-SQL查询高级系列文章.但是T-SQL查询进阶系列还远远没有写完。这个主题放到高级我想是因为这个主题需要一些进阶的知识作为基础..如果文章中有错误的地方请不吝指正.本篇文章的内容需要索引的知识作为基础。简介 在SQL SERVER中,非聚集索引其实可以看作是一个含有聚集索引的表.但相比实际的表而言.非聚集索引中所存储的表的列数要窄很多,因为非聚集索引仅仅包含原表中非聚集索引的列和指向实际物理表的指针。 并且,对于非聚集索引表来说,其中所存放的列是按照聚集索引来进行存放的.所以查找速度要快了很多。但是对于性能的榨取来说,SQL SERVER总是竭尽所能,假如仅仅是通过索. 阅读全文
posted @ 2012-09-18 14:22 左正 阅读(282) 评论(0) 推荐(0)
摘要: 简介 分区表是在SQL SERVER2005之后的版本引入的特性。这个特性允许把逻辑上的一个表在物理上分为很多部分。而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个表做union操作. 分区表在逻辑上是一个表,而物理上是多个表.这意味着从用户的角度来看,分区表和普通表是一样的。这个概念可以简单如下图所示: 而对于SQL SERVER2005之前的版本,是没有分区这个概念的,所谓的分区仅仅是分布式视图: 本篇文章所讲述的分区表指的是SQL SERVER2005之后引入的分区表特性.为什么要对表进行分区 在回答标题的问题之前,需要说明的是,表分区这个特性只有.. 阅读全文
posted @ 2012-09-18 14:11 左正 阅读(253) 评论(0) 推荐(0)
摘要: 简介 Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的。 可以想象出,需要使用Merge的场景比如: 数据同步 数据转换 基于源表对目标表做Insert,Update,Delete操作使用Merge关键字的好处 首先是更加短小精悍的语句,在 阅读全文
posted @ 2012-09-18 13:46 左正 阅读(172) 评论(0) 推荐(0)
摘要: 在我的上一篇关于SQL SERVER索引的博文,有圆友问道关于逻辑读,预读和物理读的概念.我觉的还是写一篇博文能把这个问题解释清楚。SQL SERVER数据存储的形式 在谈到几种不同的读取方式之前,首先要理解SQL SERVER数据存储的方式.SQL SERVER存储的最小单位为页(Page).每一页大小为8k,SQL SERVER对于页的读取是原子性,要么读完一页,要么完全不读,不会有中间状态。而页之间的数据组织结构为B树(请参考我之前的博文).所以SQL SERVER对于逻辑读,预读,和物理读的单位是页. SQL SERVER一页的总大小为:8K 但是这一页存储的数据会是:8K=8192. 阅读全文
posted @ 2012-09-18 11:40 左正 阅读(228) 评论(0) 推荐(0)
摘要: 简介 当查询优化器(Query Optimizer)将T-SQL语句解析后并从执行计划中选择最低消耗的执行计划后,具体的执行就会交由执行引擎(Execution Engine)来进行执行。本文旨在分类讲述执行计划中每一种操作的相关信息。数据访问操作 首先最基本的操作就是访问数据。这既可以通过直接访问表,也可以通过访问索引来进行。表内数据的组织方式分为堆(Heap)和B树,其中表中没有建立聚集索引时数据是通过堆进行组织的,这个是无序的,表中建立聚集索引后和非聚集索引的数据都是以B树方式进行组织,这种方式数据是有序存储的。通常来说,非聚集索引仅仅包含整个表的部分列,对于过滤索引,还仅仅包含部分行。 阅读全文
posted @ 2012-09-18 11:30 左正 阅读(201) 评论(0) 推荐(0)
摘要: 简介 理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理。二级存储(secondary storage) 对于计算机来说,存储体系是分层级的。离CPU越近的地方速度愉快,但容量越小(如图1所示)。比如:传统的计算机存储体系结构离CPU由近到远依次是:CPU内的寄存器,一级缓存,二级缓存,内存,硬盘。但同时离CPU越远的存储系统都会比之前的存储系统大一个数量级。比如硬盘通常要比同时代的内存大一个数量级。 图1.计算机存储体系 因此对于SQL Server来说,正常的生产系统所配置的内存通常不能装载所有. 阅读全文
posted @ 2012-09-18 11:02 左正 阅读(137) 评论(0) 推荐(0)
摘要: bulk方法主要思想是通过在客户端把数据都缓存在Table中,然后利用SqlBulkCopy一次性把Table中的数据插入到数据库代码如下:public static void BulkToDB(DataTable dt) { SqlConnection sqlConn = new SqlConnection( ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString); SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn); bulkCopy.Destin 阅读全文
posted @ 2012-09-18 10:15 左正 阅读(371) 评论(0) 推荐(0)
摘要: 使用UseInternalTransaction在构造函数SqlBulkCopy(String, SqlBulkCopyOptions)里面有SqlBulkCopyOptions的选项,有如下可选项。我们看到可选项分别有保持Identity键,检查约束,是否锁表,保持null值,触发触发器,使用事务。所以如果只是想把SqlBulkCopy包含在事务中,只要打开此属性即可。使用System.Data.SqlClient.SqlTransaction使用自定义的事务,将SqlBulkCopy和其他操作一起包含在一个事务中。这种方法只要使用另一个构造函数即可:SqlBulkCopy(SqlConne 阅读全文
posted @ 2012-09-18 09:56 左正 阅读(1966) 评论(0) 推荐(0)
摘要: 直接在 SQLQuery 执行下就好了。CREATE TYPE [dbo].[D_bigint(8)] FROM [bigint] NULLCREATE TYPE [dbo].[D_bit] FROM [bit] NULLCREATE TYPE [dbo].[D_datetime(8)] FROM [datetime] NULLCREATE TYPE [dbo].[D_int(4)] FROM [int] NULLCREATE TYPE [dbo].[D_text] FROM [text] NULLCREATE TYPE [dbo].[D_varchar(10)] FROM [varchar] 阅读全文
posted @ 2012-09-18 09:43 左正 阅读(207) 评论(0) 推荐(0)
摘要: 最近遇到一个行转列的问题,给定一个时间段,统计每天每个车的签到情况,用动态拼接的方法实现,受Varchar(8000)的影响,拼接的SQL语句不能太长,遇到这种动态列头的问题,这种方法肯定不是很好,希望有高人指点新招~/*建立车信息表*/goif NOT EXISTS (select 1 from sysobjects where id = object_id('Car') AND type='U')BEGIN CREATE TABLE Car ( Carid UNIQUEIDENTIFIER , CarName VARCHAR(100) )endgo... 阅读全文
posted @ 2012-09-18 09:42 左正 阅读(253) 评论(0) 推荐(0)
摘要: 在工作当中会经常用到递归,比如菜单的展示。一种方法就是从数据库中取出所有的数据,然后在程序中循环获取符合条件的数据。另外一种方法就是使用SQL直接读取符合条件的数据。对于递归查询,T-SQL和PL/SQL进行了不同的处理。以表Deparment为例表结构为:Id 部门内码,DeptCode 部门编码,ParentDeptId 上级部门内码使用T-SQL:with Dep as ( select Id,DeptCode,DeptName from Department where Id=1 union all select d.Id,d.DeptCode,d.DeptNa... 阅读全文
posted @ 2012-09-18 09:36 左正 阅读(13131) 评论(0) 推荐(6)
摘要: 曾经和一些DBA和数据库开发人员交流时,问他们都用过一些什么样的DB方面的工具,大部分人除了SSMS和Profile之外,基本就没有使用过其他工具了;诚然,SSMS和Profile足够强大,工作的大部分内容都能通过它们搞定,但是MS、第三方公司甚至是个人开发者为SQLServer提供了很多其他的工具,如果你能充分的掌握这些工具,无疑会给我们数据库的管理、优化、测试和排错节省大量的时间和精力,下面就来介绍除SSMS和Profile之外的其他有用的工具。NO1: PD(PowerDesigner)功能:SysBase公司提供的数据库设计工具,功能很强大,是做数据库设计时必备的工具;下载:http: 阅读全文
posted @ 2012-09-18 09:33 左正 阅读(229) 评论(0) 推荐(0)
摘要: 临时表或表变量我们一般用来充当中间结果集,很多时候都在用,但真正了解他们之间的区别的人还是很少的,网上流传的说法也不甚统一,所以今天我就做一个实验,让我们看看临时表和表变量的区别,以及他们各自的用途。执行以下语句,对测试环境做准备DBCC DROPCLEANBUFFERS --从缓冲池中删除所有清除缓冲区DBCC FREEPROCCACHE --清除计划缓存CHECKPOINT --写入MDF中1) 关于存储表变量在内存中,是否真的不写磁盘,不会造成任何IO开销?use tempdb exec sp_spaceused--database_name database_siz... 阅读全文
posted @ 2012-09-18 09:08 左正 阅读(311) 评论(0) 推荐(0)
摘要: 如何提高SQL Server数据库的性能,该从哪里入手呢?笔者认为,该遵循从外到内的顺序,来改善数据库的运行性能。如下图: 第一层:网络环境 到企业碰到数据库反映速度比较慢时,首先想到的是是否是网络环境所造成的。而不是一开始就想着如何去提高数据库的性能。这是很多数据库管理员的一个误区。因为当网络环境比较恶劣时,你就算再怎么去改善数据库性能,也是枉然。 如以前有个客户,向笔者反映数据库响应时间比较长,让笔者给他们一个提高数据库性能的解决方案。那时,笔者感到很奇怪。因为据笔者所知,这家客户数据库的记录量并不是很大。而且,他们配置的数据库服务器硬件很不错。笔者为此还特意跑到他们企业去查看问题的... 阅读全文
posted @ 2012-09-15 10:34 左正 阅读(181) 评论(0) 推荐(0)
摘要: 大家在写查询时,为了性能,往往会在表后面加一个nolock,或者是with(nolock),其目的就是查询是不锁定表,从而达到提高查询速度的目的。什么是并发访问:同一时间有多个用户访问同一资源,并发用户中如果有用户对资源做了修改,此时就会对其它用户产生某些不利的影响,例如:1:脏读,一个用户对一个资源做了修改,此时另外一个用户正好读取了这条被修改的记录,然后,第一个用户放弃修改,数据回到修改之前,这两个不同的结果就是脏读。2:不可重复读,一个用户的一个操作是一个事务,这个事务分两次读取同一条记录,如果第一次读取后,有另外用户修改了这个数据,然后第二次读取的数据正好是其它用户修改的数据,这样造成 阅读全文
posted @ 2012-09-15 10:28 左正 阅读(329) 评论(0) 推荐(0)
摘要: 我们做软件开发的,大部分人都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,如果数据量大,人员流动大,那么我么还能保证下一段时间系统还能流畅的运行吗?我么还能保证下一个人能看懂我么的存储过程吗?那么我结合公司平时的培训和平时个人工作经验和大家分享一下,希望对大家有帮助。 要知道SQL语句,我想我们有必要知道SQL Server查询分析器怎么执行我们的SQL语句的,我们很多人会看执行计划,或者用Profiler来监视和调优查询语句或者存储过程慢的原因,但是如果我们知道查询分析器的执行逻辑顺序,下手的时候就胸有成竹,那么下手是不是有把握点呢? 一、查.. 阅读全文
posted @ 2012-09-15 09:18 左正 阅读(188) 评论(0) 推荐(0)
摘要: 虽然查询速度慢的原因很多,但是如果通过一定的优化,也可以使查询问题得到一定程度的解决。 查询速度慢的原因很多,常见如下几种:没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)I/O吞吐量小,形成了瓶颈效应。没有创建计算列导致查询不优化。内存不足网络速度慢查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)sp_lock, sp_who, 活动的用户查看,原因是读写竞争资源。返回了不必要的行和列查询语句不好,没有优化 可以通过如下方法来优化查询 :把数据、日志、索引放到不同的I/O设备上,增加读取速度,以前可以.. 阅读全文
posted @ 2012-09-14 14:37 左正 阅读(249) 评论(0) 推荐(0)
摘要: 先分3点从全局来看对操作系统的安全需求:防止对DBMS的非法访问和修改,保护存储的数据、文件的安全性,对数据库用户的认证 对数据库系统本身的安全需求:用户认证管理、访问控制、审计,数据库的稳定性,保证数据的安全性与完整性,完善的恢复功能,数据加密 对数据库应用系统的安全需求:访问控制、认证管理,对数据库的保护防止非法访问和修改,自身的稳定性举一个实例SQL注入:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义。 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中 阅读全文
posted @ 2012-09-14 14:06 左正 阅读(403) 评论(0) 推荐(0)
摘要: 概念简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理。观点正因为游标可以将结果集一条条取出处理,所以会增加服务器的负担。再者使用游标的效率远远没有使用默认的结果集效率高,在默认结果集中,从客户端发送到服务器的唯一一个数据包是包含需执行语句的数据包。而在使用服务器游标时,每一个FETCH语句都必须从客户端发送到服务器,然后在服务器中将它解析并编译为执行计划。除非要再sqlserver上进行很复杂的数据操作。基本知识一. SQL Server 2005 支持两种请求游标的方法 1.Transact-SQL (支持 SQL-92); 2.数据库应用程序编程接口(API).. 阅读全文
posted @ 2012-09-14 14:01 左正 阅读(895) 评论(0) 推荐(0)
摘要: 设计背景由于历史原因,线上库环境数据量及其庞大,很多千万级以上甚至过亿的表。目标是让N张互相关联的表 按照一张源表为基表,数据搬移归档 这里我们举例N为50 每张表数据5000W最差性能sql进化客串2表KeyName 字段意义 名称等相同 从bug01 表中取出前500条不在bug02 表中的数据最差性能:?SELECT TOP 500 a.KeyName FROM bug01 a LEFT JOIN bug02 b on a.KeyName = b.KeyName WHERE (a.KeyName not in (select distinct b.KeyName From bug02)) 阅读全文
posted @ 2012-09-14 13:44 左正 阅读(214) 评论(0) 推荐(0)
摘要: 目录1、什么是执行计划?执行计划是依赖于什么信息 2、 统一SQL语句的写法减少解析开销 3、 减少SQL语句的嵌套 4、 使用“临时表”暂存中间结果 5、 OLTP系统SQL语句必须采用绑定变量 6、 倾斜字段的绑定变量窥测问题 7、 begin tran的事务要尽量地小 8、 一些SQL查询语句应加上nolock 9、加nolock后查询经常发生页分裂的表,容易产生跳读或重复读 10、聚集索引没有建在表的顺序字段上,该表容易发生页分裂 11、使用复合索引提高多个where条件的查询速度 12、使用like进行模糊查询时应注意尽量不要使用前% 13、SQL Server 表连接的三种方式 1 阅读全文
posted @ 2012-09-14 11:22 左正 阅读(159) 评论(0) 推荐(0)
摘要: Sql代码 sql over的作用及用法 RANK ( ) OVER ( [query_partition_clause] order_by_clause ) DENSE_RANK ( ) OVER ( [query_partition_clause] order_by_clause ) 可实现按指定的字段分组排序,对于相同分组字段的结果集进行排序, 其中PARTITION BY 为分组字段,ORDERBY 指定排序字段 over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用。 其参数:over(partition by colum... 阅读全文
posted @ 2012-09-13 10:11 左正 阅读(737) 评论(0) 推荐(0)
摘要: 1. CREATE TABLE Team ( TeamID int identity not null, TeamDoc xml DEFAULT '<Team />' NOT NULL )query方法 注意:你可以在表和视图列、T-SQL语句或存储过程的参数中使用XML。 这个方法允许你指定一个要计算的Xquery或XPath表达式,该方法的结果是一个XML数据类型对象。它的具体语法形式如下:query(XQuery) 第一个参数总是一个Xquery表达式。下面的例子使用一个查询来返回一个XML文档-其中包含有关每一个小组的投球手的信息:SELECT TeamDoc.quer 阅读全文
posted @ 2012-09-12 18:27 左正 阅读(202) 评论(0) 推荐(0)
摘要: 创建 for触发器use test gocreate trigger t1on afor insert,updateasinsert into b(name) values('a')在a表插入或更新数据后,在b表同时插入一条数据 阅读全文
posted @ 2012-09-11 14:36 左正 阅读(143) 评论(0) 推荐(0)
摘要: 事务事务的点:1.begin tran是事务开始的地方,也是 事务回滚的起点.也就说他会忽略这个起点之后的最终没有提交的所有语句,2.commit tran事务的提交 是一个事务的终点当发出 commit tran命令时,可以认为 该事务是 持久的.撤销已完成事务的唯一方法 是 发出一个新的事务.从功能上而言,该事务 是对第一个事务的反转.3.rollback tran事务回滚到 begin执行之前的状态. 不过也有例外,也可以 使用 保存点.4.save tran保存事务从本质上说就是创建书签. 为书签起个名字,就是在回滚中 引用它.创建书签的好处就是 可以 回滚到代码中的特定位置.注意: 阅读全文
posted @ 2012-09-11 14:35 左正 阅读(184) 评论(0) 推荐(0)
摘要: 用户自定义函数 和存储过程是类似的,是一组 有序的t-sql语句,udf被 预先优化和编译,并且可以作为一个单元来进行调用.使用存储过程 时 可传入参数,传出参数.可以返回值,不过该值用于指示成功或者失败,而非返回数据.也可以返回结果集,但是在没有将结果集插入到某种表(通常是临时表)中以供后面使用的情况下,不能在 查询中真正使用它们. 即使使用表值 输出参数,在查询中使用结果之前,也要额外的一个步骤.那么 UDF可以传入参数,但是不可传出参数. 但是可以返回值,和系统函数一样,可以返回标量值,这个值的好处是 不像存储过程那样只限于整型数据类型,而是可以返回大多数sqlserver的数据类型.下 阅读全文
posted @ 2012-09-11 14:26 左正 阅读(303) 评论(0) 推荐(0)
摘要: 数据库结构:表内的数据:自定义函数: 递归查出 树下所有节点 ,参数是 父id create function sss(@id as int) returns @t table ( id int not null, name int not null, pid int null ) as begin declare @lay as int; insert into @t select * from tree where pid =@id; select @lay = min(id) from tree where pid =@id; --第一次 @l... 阅读全文
posted @ 2012-09-11 14:15 左正 阅读(363) 评论(0) 推荐(0)
摘要: 输入输出参数:给存储过程传参数,叫做输入参数,用户告诉存储过程需要 利用这个参数干些什么.输出参数: 从存储过程得到那些数据.创建一个可选参数的存储过程:create proc pa1@name varchar(50)=NULLasif(@name is not null) select * from a where name like @name+'%';else select * from aexec pa1 exec pa1 a 创建输出参数:使用输出参数 传递 最后一次插入的标识列的值:create proc pa2 @id int output as ins... 阅读全文
posted @ 2012-09-11 12:31 左正 阅读(280) 评论(0) 推荐(0)
摘要: 创建简单视图:use test go create view v1(视图名) as select name from b这样视图就创建好了.下面说下视图的本质:当执行 select * from v1 时, 那么实质上市告诉 sql server 把执行 select name from b 语句返回的结果给我.视图就像在命令执行的查询那样运行---没有任何的预先优化过程.这意味着数据在请求和所交付的数据之间增加额额外的一层系统开销,而视图的运行总是比 执行运行内部的sql 更慢.视图存在的理由就是---对于用户是安全或者简化的.视图可以隐藏敏感数据,作为过滤器 例子如下: ... 阅读全文
posted @ 2012-09-11 12:30 左正 阅读(229) 评论(0) 推荐(0)
摘要: 存储过程: 做的就是 返回最后一次插入的标识列 id值create proc pa2@id int outputasinsert into a(name) values('5')set @id=@@identity表: id 是标识列 ,后台代码: string cons = ConfigurationManager.ConnectionStrings["ApplicationServices"].ToString(); using (SqlConnection con=new SqlConnection(cons)) { if (con.St... 阅读全文
posted @ 2012-09-11 12:30 左正 阅读(309) 评论(0) 推荐(0)
摘要: 查看最后一行插入标识列的值use testgoinsert into a(name) values('ss')declare @ident intselect @ident=@@identityselect @ident结果: 查看语句响应了多少行use test godeclare @rowCount intselect * from bselect @rowCount=@@rowcountselect @rowCount效果如图:批处理:使用go可以将一个脚本,分为多个批处理下面脚本创建一个表,if not exists( select s.name,t.name from 阅读全文
posted @ 2012-09-11 12:30 左正 阅读(217) 评论(0) 推荐(0)
摘要: 第一范式: 全部是关于消除重复数据组和保证原子性的规范化信息.通俗讲 就是 创建主键,然后将任何重复的数据组移动到新的表中,为这些表创建新键.原始表结构:一个客户可能对应很多订单,那么表中将出现大量的重复数据.解决办法就是 将重复列 移到另一个表中第二范式:进一步减少重复的数据出现.(不一定是数据组)尽量使所有列 都依赖于真个键.第三范式:处理的问题是 使得表中所有列 不仅仅是依赖于某个事物--而是要依赖于 正确的事物.第三范式的规则:1.首先实现第二范式.2.任何列都不能依赖于非键列.3.不可以有派生的数据.(派生 就是 有 表中其他的列 计算得到的列)Boyce-Codd范式(实际是第三范 阅读全文
posted @ 2012-09-11 12:29 左正 阅读(254) 评论(0) 推荐(0)
摘要: sql server的存储机制区段: 是用来为表和索引 分配空间的基本存储单元. 由 8个连续的页面构成,大小为64kb.区段的注意事项:一旦区段已满,那么下一记录 将要占据的空间不是记录的大小,而是整个区段的大小.通过预先分配空间,sql server节省了为每个记录分配新空间的时间页: 页是在到达实际数据行 之前所能达到的最后一个存储级别.尽管每个区段中的页数是固定的,但是每一页中的行数 不是固定的--这完全取决于行的大小,而行的大小 可以变化的. 可以把 页 看作是 表行和索引行的容器.通常不允许行跨页.就是行的大小 最大为8kb.下面介绍两种不同的页类型:数据页: 就是表中的实际数据索 阅读全文
posted @ 2012-09-11 12:29 左正 阅读(310) 评论(0) 推荐(0)
摘要: 索引设计的建议:一.检查where子句和连接条件列当一个查询提交到sql server时,查询优化器尝试为查询中引用的所有表查找最佳的数据访问机制,一下是它所进行的方式。1.优化器识别Where子句和连接条件中包含的列、2.接着优化器检查这些列的索引.3.优化器通过从索引上维护的统计确定子句的选择性(也就是返回多少行),评估每个索引的有效性4.最终,优化器根据前面几个步骤中收集的信息,评估读取所限定的行开销最低的方法.下面看个例子: Table_1表内 又 30000条数据 执行查询:查看结果:逻辑读取的次数为 95次.下面加上where 条件句, where 的列 是 含有聚集索引的.结果: 阅读全文
posted @ 2012-09-11 12:28 左正 阅读(250) 评论(0) 推荐(0)
摘要: 查看数据库的信息:INFORMATION_SCHEMA.CHECK_CONSTRAINTSINFORMATION_SCHEMA.COLUMN_DOMAIN_USAGEINFORMATION_SCHEMA.COLUMN_PRIVILEGESINFORMATION_SCHEMA.COLUMNS 查看数据库中的所有列INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGEINFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGEINFORMATION_SCHEMA.DOMAIN_CONSTRAINTSINFORMATION_SCHEMA.DOMAI 阅读全文
posted @ 2012-09-11 12:28 左正 阅读(270) 评论(0) 推荐(0)
摘要: 子查询 构建嵌套子查询测试表: stu secselect * from stu where sec in ( select ID from sec) select a.* from stu a join sec b on a.sec=b.ID这两个语句返回的相同的查询结果.关联子查询关联子查询 信息传递是双向的.此查询分三个步骤完成:1.外部查询获得一个记录,然后将该记录传递到内部查询混合数据类型cast和convert这两个函数 都可以执行 数据类型转换,不同的是 convert还提供一些日期格式的转换,而cast没这个功能.print cast(getdate() as varchar. 阅读全文
posted @ 2012-09-11 12:28 左正 阅读(204) 评论(0) 推荐(0)
上一页 1 ··· 36 37 38 39 40 41 42 43 44 ··· 56 下一页