随笔分类 - SQL

摘要:SQL语句中使用parameters的好处:1、提高SQL语句的性能:每个不同的SQL语句在执行前都会进行相应的预解析等操作,这个过程是比较耗时的,而任何值的不同也是SQL不同,比如:SELECT * FROM USER WHERE USER_ID = 1与SELECT * FROM USER WHERE USER_ID = 2是不同的SQL语句。如果将where条件中的USER_ID的值通过参数传递的话,两个SQL内容就一样,数据库系统就只需要进行一次解析就可以了,然后缓存起来,以后可以直接使用,从而大大提高SQL语句的性能。2、避免因为程序员的考虑不足引起的SQL注入安全问题 比如:以 . 阅读全文
posted @ 2012-10-09 17:35 左正 阅读(399) 评论(0) 推荐(0) 编辑
摘要:Transact-SQL 代码中的错误可使用 TRY…CATCH 构造处理,此功能类似于C#语言的异常处理功能。TRY…CATCH 构造包括两部分:一个 TRY 块和一个 CATCH 块 1.TRY...CATCH 块不处理导致数据库引擎关闭连接的严重性为 20 或更高的错误。但是,只要连接不关闭,TRY...CATCH 就会处理严重性为 20 或更高的错误。 2.严重性为 10 或更低的错误被视为警告或信息性消息,TRY...CATCH 块不处理此类错误。1--ids 主键 2createtable test1( ids intnotnull,3constraint pk_test1 p.. 阅读全文
posted @ 2012-10-08 14:36 左正 阅读(242) 评论(0) 推荐(0) 编辑
摘要:SQL code在SQL SERVER 中访问ORACLE数据库服务器的几种方法 1.通过行集函数opendatasource select*fromopendatasource('MSDAORA', 'Data Source=XST4;User ID=manager;Password=sjpsjsjs')..MISD.PBCATCOL 其中,MSDAORA是OLEDB FOR ORACLE的驱动, 用户名和表名一定要大小,服务器和用户名之间是两个点;并且User ID和要查询的用户名必须是一样的,不能以其他用户名登陆 2. 使用MS SQL的openrowse 阅读全文
posted @ 2012-09-26 11:09 左正 阅读(297) 评论(0) 推荐(0) 编辑
摘要: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 来连接条件,否则将导致引擎 阅读全文
posted @ 2012-09-21 14:02 左正 阅读(150) 评论(0) 推荐(0) 编辑
摘要:FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。那么以一个实例为主.一.FOR XML PATH 简单介绍那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下:接下来我们来看应用FOR XML PATH的查询结果语句如下:SELECT*FROM@hobbyFOR XML PATH结果:<row> <hobbyID>1</hobbyID> <hName> 阅读全文
posted @ 2012-09-19 17:20 左正 阅读(157) 评论(0) 推荐(0) 编辑
摘要:Sys.SysProcesses 系统表是一个很重要的系统视图,主要用来定位与解决Sql Server的阻塞和死锁。MSDN:包含正在 SQL Server 实例上运行的进程的相关信息。这些进程可以是客户端进程或系统进程。视图中主要的字段:1. Spid:Sql Servr 会话ID2. Kpid:Windows 线程ID3. Blocked:正在阻塞求情的会话 ID。如果此列为 Null,则标识请求未被阻塞4. Waittype:当前连接的等待资源编号,标示是否等待资源,0 或 Null表示不需要等待任何资源5. Waittime:当前等待时间,单位为毫秒,0 表示没有等待6. DBID:当 阅读全文
posted @ 2012-09-19 16:37 左正 阅读(287) 评论(0) 推荐(0) 编辑
摘要:目的:本文主要是详细讲解SSIS Package包的制作过程 本人买过的一张盗版windows 2003操作系统光盘上,上面自带有很详细的图文介绍,也就是傻瓜版的系统安装图解。因此,本文打算也是采用那种方式进行讲解,这样的话,根据如下步骤,各位对于制作自己的SSIS Package包就会有一个整体的认识,相对来说下面将比较详细的显示每一个过程,主要有步骤如下: (一)首先,我们打开SQL Server 2005数据库自带的SQL Server Business Intelligence Development Studio(SQL Server商业智能开发平台)。打开的界面和我们平常用的Vis 阅读全文
posted @ 2012-09-19 15:21 左正 阅读(276) 评论(0) 推荐(0) 编辑
摘要:本文目录:(一)背景 (二)数据库数据导入到Excel的方法比较 (三)SSIS的简介 (四)数据库中存储过程示例(SSIS应用需要) (五)Excel模板的制作(这步这么简单,稍微介绍一下) (六)SSIS操作过程(生成Package,用来调用)(下一篇随笔将详细讲解制作Package包的过程,图片太多,篇幅过长,因此本文将直接采用生成的Package包进行应用) (七)C#中如何调用SSIS创建的Package和Excel模板(可以自己编写逻辑代码进行重复利用),用来生成Excel数据 (八)总结(一)背景 如何将数据库中的数据导入到EXCEL文件中,我们... 阅读全文
posted @ 2012-09-19 15:13 左正 阅读(575) 评论(0) 推荐(0) 编辑
摘要:SQL Server 存储过程的分页,这个问题已经讨论过几年了,很多朋友在问我,所以在此发表一下我的观点建立表:CREATE TABLE [TestTable] ([ID] [int] IDENTITY (1, 1) NOT NULL ,[FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,[LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,[Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,[N 阅读全文
posted @ 2012-09-18 18:02 左正 阅读(588) 评论(0) 推荐(0) 编辑
摘要:简介数据库范式在数据库设计中的地位一直很暧昧,教科书中对于数据库范式倒是都给出了学术性的定义,但实际应用中范式的应用却不甚乐观,这篇文章会用简单的语言和一个简单的数据库DEMO将一个不符合范式的数据库一步步从第一范式实现到第四范式。范式的目标应用数据库范式可以带来许多好处,但是最重要的好处归结为三点:1.减少数据冗余(这是最主要的好处,其他好处都是由此而附带的)2.消除异常(插入异常,更新异常,删除异常)3.让数据组织的更加和谐…但剑是双刃的,应用数据库范式同样也会带来弊端,这会在文章后面说到。什么是范式简单的说,范式是为了消除重复数据减少冗余数据,从而让数据库内的数据更好的组织,让磁盘空间得 阅读全文
posted @ 2012-09-18 16:48 左正 阅读(112) 评论(0) 推荐(0) 编辑
摘要:引言在前两篇文章中,对于单表查询和多表查询的概念做出了详细的介绍,在本篇文章中会主要介绍聚合函数的使用和数据的分组.简介简单的说,聚合函数是按照一定的规则将多行(Row)数据汇总成一行的函数。对数据进行汇总前,还可以按照特定的列(column)将数据进行分组(Group by)再汇总,然后按照再次给定的条件进行筛选(Having).聚合函数将多行数据进行汇总的概念可以简单用下图解释:简单聚合函数简单聚合函数是那些拥有很直观将多行(Row)汇总为一行(Row)计算规则的函数。这些函数往往从函数名本身就可以猜测出函数的作用,而这些函数的参数都是数字类型的。简单聚合函数包括:Avg,Sum,Max, 阅读全文
posted @ 2012-09-18 16:42 左正 阅读(161) 评论(0) 推荐(0) 编辑
摘要:引言在前篇文章中(SQL查询入门(上篇),我对数据库查询的基本概念以及单表查询做了详细的解释,本篇文章中,主要说明SQL中的各种连接以及使用范围,以及更进一步的解释关系代数法和关系演算法对在同一条查询的不同思路。多表连接简介在关系数据库中,一个查询往往会涉及多个表,因为很少有数据库只有一个表,而如果大多查询只涉及到一个表的,那么那个表也往往低于第三范式,存在大量冗余和异常。因此,连接(Join)就是一种把多个表连接成一个表的重要手段.比如简单两个表连接学生表(Student)和班级(Class)表,如图:进行连接后如图:笛卡尔积笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。 阅读全文
posted @ 2012-09-18 16:40 左正 阅读(241) 评论(0) 推荐(0) 编辑
摘要:引言SQL语言是一门简单易学却又功能强大的语言,它能让你快速上手并写出比较复杂的查询语句。但对于大多数开发者来说,使用SQL查询数据库并没有一个抽象的过程和一个合理的步骤,这很可能会使在写一些特定的SQL查询语句来解决特定问题时被”卡”住,本系列文章主要讲述SQL查询时一些基本的理论,以及写查询语句的抽象思路。SQL查询简介SQL语言起源于1970年E.J.Codd发表的关系数据库理论,所以SQL是为关系数据库服务的。而对于SQL查询,是指从数据库中取得数据的子集,这句话貌似听着有些晦涩是吧,下面通过几张图片简单说明一下:假如一个数据库中只有一个表,再假如所有数据如下图(取自Adventure 阅读全文
posted @ 2012-09-18 16:38 左正 阅读(280) 评论(0) 推荐(0) 编辑
摘要:引言SQL有着非常强大且灵活的查询方式,而多表连接操作往往也可以用子查询进行替代,本篇文章将会讲述子查询的方方面面。简介子查询本质上是嵌套进其他SELECT,UPDATE,INSERT,DELETE语句的一个被限制的SELECT语句,在子查询中,只有下面几个子句可以使用SELECT子句(必须)FROM子句(必选)WHERE子句(可选)GROUP BY(可选)HAVING(可选)ORDER BY(只有在TOP关键字被使用时才可用)子查询也可以嵌套在其他子查询中,这个嵌套最多可达32层。子查询也叫内部查询(Inner query)或者内部选择(Inner Select),而包含子查询的查询语句也叫 阅读全文
posted @ 2012-09-18 16:34 左正 阅读(133) 评论(0) 推荐(0) 编辑
摘要:引言T-SQL不仅仅是一个用于查询数据库的语言,还是一个可以对数据进行操作的语言。基于列的CASE表达式就是其中一种,不像其他查询语句可以互相替代(比如用子查询实现的查询也可以使用Join实现),CASE表达式在控制基于列的逻辑大部分是无法替代的。下面文中会详细讲解CASE表达式。简介基于列的逻辑表达式,其实就是CASE表达式.可以用在SELECT,UPDATE,DELETE,SET以及IN,WHERE,ORDER BY和HAVING子句之后。由于这里讲的是T-SQL查询,所以只说到CASE表达式在SELECT子句和ORDER BY子句中的使用。CASE表达式实现的功能类似于编程语言中的IF… 阅读全文
posted @ 2012-09-18 16:24 左正 阅读(293) 评论(0) 推荐(0) 编辑
摘要:概述和其他高级语言一样,T-SQL中也有用于控制流程的语句。T-SQL中的流程控制语句进一步扩展了T-SQL的力量……使得大部分业务逻辑可以在数据库层面进行。但很多人对T-SQL中的流程控制语句并没有系统的了解,本篇文章会系统的对T-SQL语句中的流程控制语句进行系统讲解。基本概念在没有流程控制语句的情况下,T-SQL语句是按照从上到下的顺序逐个执行:使用流程控制语句可以让开发人员可以基于某些逻辑进行选择性的跳转,实现了类似高级语言的跳转结构:流程控制语句的使用范围和GO关键字流程控制语句只能在单个批处理段(Batch),用户自定义函数和存储过程中使用。不能跨多个批处理段或者用户自定义函数和存 阅读全文
posted @ 2012-09-18 16:16 左正 阅读(189) 评论(0) 推荐(0) 编辑
摘要:概述变量对于一种语言是必不可少的一部分,当然,对于T-SQL来讲也是一样。在简单查询中,往往很少用到变量,但无论对于复杂的查询或存储过程中,变量都是必不可少的一部分.变量的种类在T-SQL中,变量按生存范围可以分为全局变量(Global Variable)和局部变量(Local Variable).1.全局变量是由系统定义的,在整个SQL SERVER实例内都能访问到的变量.全局变量以@@作为第一个字符,用户只能访问,不能赋值。2.局部变量由用户定义,生命周期只在一个批处理内有效。局部变量以@作为第一个字符,由用户自己定义和赋值。一个简单的例子如下因为全局变量仅仅是用于读取系统的一些参数,具体 阅读全文
posted @ 2012-09-18 16:10 左正 阅读(209) 评论(0) 推荐(0) 编辑
摘要:概述关系数据库的起源起源于数学中的集合概念.所以集合与集合之间,也同样继承了数学集合之间的运算.而对于在关系数据库中,常常用于两个数据集中并没有直接的关系数据库中的“关系”,比如外键.但两个数据集会有间接的关系,比如两届比赛,参加比赛人员集合之间会有间接关系.数据集运算的种类在T-SQL中,关系运算实际上可以分为四类,首先看我们举例子用的表:这里的例子表分别为两个不同会议参加的人员记录,分别为Meeting1和Meeting2,如下: 关系运算的具体可以分为以下四类:1.A∩B,既是所求数据集既在A中,又在B中在实例表中,实际的例子为既参加第一个会议,又参加第二个会议人的集合,如下图:2.A∪ 阅读全文
posted @ 2012-09-18 16:02 左正 阅读(368) 评论(0) 推荐(0) 编辑
摘要:概述游标是邪恶的!在关系数据库中,我们对于查询的思考是面向集合的。而游标打破了这一规则,游标使得我们思考方式变为逐行进行.对于类C的开发人员来着,这样的思考方式会更加舒服。正常面向集合的思维方式是:而对于游标来说:这也是为什么游标是邪恶的,它会使开发人员变懒,懒得去想用面向集合的查询方式实现某些功能.同样的,在性能上,游标会吃更多的内存,减少可用的并发,占用宽带,锁定资源,当然还有更多的代码量……从游标对数据库的读取方式来说,不难看出游标为什么占用更多的资源,打个比方:当你从ATM取钱的时候,是一次取1000效率更高呢,还是取10次100?既然游标这么“邪恶”,为什么还要学习游标我个人认为存在 阅读全文
posted @ 2012-09-18 15:58 左正 阅读(1107) 评论(0) 推荐(0) 编辑
摘要:简介 对于SELECT查询语句来说,通常情况下,为了使T-SQL代码更加简洁和可读,在一个查询中引用另外的结果集都是通过视图而不是子查询来进行分解的.但是,视图是作为系统对象存在数据库中,那对于结果集仅仅需要在存储过程或是用户自定义函数中使用一次的时候,使用视图就显得有些奢侈了. 公用表表达式(Common Table Expression)是SQL SERVER 2005版本之后引入的一个特性.CTE可以看作是一个临时的结果集,可以在接下来的一个SELECT,INSERT,UPDATE,DELETE,MERGE语句中被多次引用。使用公用表达式可以让语句更加清晰简练. 除此之外,根据微软对CT 阅读全文
posted @ 2012-09-18 15:11 左正 阅读(264) 评论(0) 推荐(0) 编辑