一切福田,不離方寸,從心而覓,感無不通。

Category Archives: SQLServer

存储过程中执行动态Sql语句

MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有。还有一个最大的好处就是利用sp_executesql,能够重用执行计划,这就大大提供了执行性能,还可以编写更安全的代码。EXEC在某些情况下会更灵活。除非您有令人信服的理由使用EXEC,否侧尽量使用sp_executesql. 1.EXEC的使用 EXEC命令有两种用法,一种是执行一个存储过程,另一种是执行一个动态的批处理。以下所讲的都是第二种用法。 下面先使用EXEC演示一个例子,代码1   代码 DECLARE @TableName VARCHAR(50),@Sql NVARCHAR (MAX),@OrderID INT; SET @TableName = 'Orders'; SET @OrderID = 10251; SET @sql =      ’SELECT * FROM '+QUOTENAME(@TableName) +’WHERE OrderID = '+      CAST(@OrderID AS VARCHAR(10))+' ORDER BY ORDERID DESC' EXEC(@sql);   注:这里的EXEC括号中只允许包含一个字符串变量,但是可以串联多个变量,如果我们这样写EXEC: EXEC('SELECT TOP('+ CAST(@TopCount AS VARCHAR(10)) +')* FROM '+            QUOTENAME(@TableName) +' ORDER BY ORDERID DESC');   SQL编译器就会报错,编译不通过,而如果我们这样:

  编译器就会通过; 所以最佳的做法是把代码构造到一个变量中,然后再把该变量作为EXEC命令的输入参数,这样就不会受限制了。 EXEC的缺点是不提供接口,这里的接口是指,它不能执行一个包含一个带变量符的批处理,如下 代码 DECLARE @TableName VARCHAR(50),@Sql NVARCHAR(MAX),@OrderID INT; SET @TableName = 'Orders'; SET @OrderID = 10251; SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) +      ’WHERE OrderID = @OrderID […]

龙生   12 Aug 2013
View Details

SQL Server 存储过程

Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。 Ø 存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。 由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快。同时由于在调用时只需用提供存储过程名和必要的参数信息,所以在一定程度上也可以减少网络流量、简单网络负担。   1、 存储过程的优点 A、 存储过程允许标准组件式编程 存储过程创建后可以在程序中被多次调用执行,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,但对应用程序源代码却毫无影响,从而极大的提高了程序的可移植性。 B、 存储过程能够实现较快的执行速度 如果某一操作包含大量的T-SQL语句代码,分别被多次执行,那么存储过程要比批处理的执行速度快得多。因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的存储计划。而批处理的T-SQL语句每次运行都需要预编译和优化,所以速度就要慢一些。 C、 存储过程减轻网络流量 对于同一个针对数据库对象的操作,如果这一操作所涉及到的T-SQL语句被组织成一存储过程,那么当在客户机上调用该存储过程时,网络中传递的只是该调用语句,否则将会是多条SQL语句。从而减轻了网络流量,降低了网络负载。 D、 存储过程可被作为一种安全机制来充分利用 系统管理员可以对执行的某一个存储过程进行权限限制,从而能够实现对某些数据访问的限制,避免非授权用户对数据的访问,保证数据的安全。   Ø 系统存储过程 系统存储过程是系统创建的存储过程,目的在于能够方便的从系统表中查询信息或完成与更新数据库表相关的管理任务或其他的系统管理任务。系统存储过程主要存储在master数据库中,以“sp”下划线开头的存储过程。尽管这些系统存储过程在master数据库中,但我们在其他数据库还是可以调用系统存储过程。有一些系统存储过程会在创建新的数据库的时候被自动创建在当前数据库中。 常用系统存储过程有:

系统存储过程示例:

  Ø 用户自定义存储过程 1、 创建语法

  2、 创建不带参数存储过程

3、 修改存储过程

4、 带参存储过程

5、 带通配符参数存储过程

6、 带输出参数存储过程

7、 不缓存存储过程

8、 加密存储过程

9、 带游标参数存储过程

10、 分页存储过程

Ø Raiserror Raiserror返回用户定义的错误信息,可以指定严重级别,设置系统变量记录所发生的错误。 语法如下:

# msg_id:在sysmessages系统表中指定的用户定义错误信息 # msg_str:用户定义的信息,信息最大长度在2047个字符。 # severity:用户定义与该消息关联的严重级别。当使用msg_id引发使用sp_addmessage创建的用户定义消息时,raiserror上指定严重性将覆盖sp_addmessage中定义的严重性。 任何用户可以指定0-18直接的严重级别。只有sysadmin固定服务器角色常用或具有alter trace权限的用户才能指定19-25直接的严重级别。19-25之间的安全级别需要使用with log选项。 # state:介于1至127直接的任何整数。State默认值是1。

龙生   12 Aug 2013
View Details

SqlServer2005高效分页sql查询语句汇总

sqlserver2005不支持关键字limit ,所以它的分页sql查询语句将不能用mysql的方式进行,幸好sqlserver2005提供了top,rownumber等关键字,这样就能通过这几个关键字实现分页。 下面是本人在网上查阅到的几种查询脚本的写法: 几种sqlserver2005高效分页sql查询语句 top方案:   sql codeselect top 10 * from table1   where id not in(select top 开始的位置 id from table1) max:    sql codeselect top 10 * from table1    where id>(select max(id)    from (select top 开始位置 id from table1order by id)tt) row: sql codeselect * from (    select row_number()over(order by tempcolumn)temprownumber,*    from (select top 开始位置+10 tempcolumn=0,* from table1)t )tt where temprownumber>开始位置 3种分页方式,分别是max方案,top方案,row方案 效率: 第1:row 第2:max 第3:top 缺点: max:必须用户编写复杂sql,不支持非唯一列排序 top:必须用户编写复杂sql,不支持复合主键 row:不支持sqlserver2000 测试数据: 共320万条数据,每页显示10条数据,分别测试了2万页、15万页和32万页。 页码,top方案,max方案,row方案 2万,60ms,46ms,33ms 15万,453ms,343ms,310ms 32万,953ms,720ms,686ms 是一种通过程序拼接sql语句的分页方案, 用户提过的sql语句不需要编写复杂的sql逻辑 诺用户提供sql如下 sql code select * from table1 从第5条开始,查询5条,处理后sql变为 sql code […]

龙生   12 Aug 2013
View Details

win8安装SQL Server 2005问题解决方法

  1、正常安装任一版本的SQL Server 2005(最好安装企业版)。 2、安装到SqlServer服务的时候提示启动服务失败(提示重试的时候),这里就是关键啦,下载本文的两个附件,里面是SP4(2005.90.5000.0)版本的sqlservr.exe和sqlos.dll。 sqlservr64.rar sqlservr32.rar 3、进入SQL Server 2005的安装路径,进入MSSQL文件夹下面的Binn文件夹,在该文件夹里面搜索“sqlservr.exe”文件,并把它复制一份到桌面或其它地方作为备份,然后把上面第2步下载的文件解压出 sqlservr.exe和sqlos.dll两个文件,复制到Binn文件夹里面覆盖原文件(即点击替换)。 例如“D:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\Binn”。 4、点击“重试”,安装继续,安装程序安装成功。 5、安装完成之后,去任务管理器找到sqlservr.exe进程,把它结束掉,把备份的sqlservr.exe文件还原回去,也就是替换回去(否则SP4安装程序以为你已经应用过SP4),然后立即打上SP4补丁(即安装已经下载好的SP4更新程序)。(在此之前不要运行SQL任何软件) 6、安装完SP4补丁,SQL Server运行正常。(补丁可以网上下载,是一个exe格式的可执行文件,实际上就是一个更新软件包,也可叫补丁,只是叫法不一样)。 7、连接SQL服务器时可能会遇到下面所示的错误(红叉错误)。 解决办法: 打开SQLServer Management Studio的时候,不要直接点击,要右击选择“以管理员身份运行”。 服务器类型:数据库引擎 服务器名称:MyComputer\SQLSERVER2005(或localhost\SQLSERVER2005) 身份验证:因为安装的时候,我选择的是混合验证模式,所以这里的身份验证可以采用两种模式,一种是Windwos身体验证,直接点连接就可以连接上。另一种是SQL Server身份验证,这种验证方式就要使用登录名和密码,登录名是安装时的默认登录名(即sa),密码是安装时输入的密码。                      使用windows身份验证                        使用SQL Server身份验证 (注:服务器名称格式是“主机名\服务器名”,上面的MyComputer是本机的主机名(即计算机名),服务器名是安装的时候的“实例名”,因为我安装的时候不是采用默认“实例名”,而是选择了第二项“命名实例”(如下图),自己输入了一个名字叫“SQLServer2005”,所以服务器名称里面的数据库名就是SQLServer2005了,输入服务器名的时候不分大小写)。       另外,服务器名称前面“主机名”部分除了可以使用计算机名外,还可以使用localhost,即用“localhost\SQLSERVER2005”一样可以登录,localhost就是本机的意思。     转自:http://blog.sina.com.cn/s/blog_6db312f10101aak3.html

龙生   04 Jul 2013
View Details

利用SQLServer的SA权限关闭TCP/IP筛选的方法

use master --创建一个临时用的表 create table dbo.ctest (txt varchar(4000)) --将VBS的内容写入刚才的表中 insert into ctest (txt) values('On Error Resume Next   strComputer = "."   Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")   Set colNicConfig = objWMIService.ExecQuery  ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")     For Each objNicConfig in colNicConfig    If objNicConfig.IPFilterSecurityEnabled Then      intDisableReturn = objNicConfig.DisableIPSec      If intDisableReturn = 0 Then        ''WScript.Echo "ip过滤已禁用."      ElseIf intDisableReturn = 1 Then        ''WScript.Echo "ip过滤已禁用." &        VbCrLf […]

龙生   26 Jun 2013
View Details

存储过程:SET Transaction Isolation Level Read语法的四种情况

这几天一直在弄存储过程,现在在这里跟大伙共享下资料: SETTransactionIsolationLevelRead UNCOMMITTED 使用这句东东呢可以分为四种情况,现在就在这里逐一介绍: 第一种情况: READ   COMMITTED 这句的作用是: 指定在读取数据时控制共享锁以避免脏读,但数据可在事务结束前更改,从而产生不可重复读取或幻像数据。该选项是   SQL   Server   的默认值。 第二种情况: READ   UNCOMMITTED 这句的作用是: 执行脏读或0级隔离锁定,这表示不发出共享锁,也不接受排它锁。当设置该选项时,可以对数据执行未提交读或脏读;在事务结束前可以更改数据内的数值,行也可以出现在数据集中或从数据集消失。该选项的作用与在事务内所有语句中的所有表上设置 NOLOCK 相同。这是四个隔离级别中限制最小的级别。 第三种情况: REPEATABLE   READ 这句的作用是: 锁定查询中使用的所有数据以防止其他用户更新数据,但是其他用户可以将新的幻像行插入数据集,且幻像行包括在当前事务的后续读取中。因为并发低于默认隔离级别,所以应只在必要时才使用该选项。 第四种情况: SERIALIZABLE 这句的作用是: 在数据集上放置一个范围锁,以防止其他用户在事务完成之前更新数据集或将行插入数据集内。这是四个隔离级别中限制最大的级别。因为并发级别较低,所以应只在必要时才使用该选项。该选项的作用与在事务内所有   SELECT   语句中的所有表上设置   HOLDLOCK   相同。 转自: http://www.cnblogs.com/qanholas/archive/2012/01/04/2312152.html

龙生   25 Jun 2013
View Details

“大数据”与“海量数据”有哪些区别?

很多年前,业界就在讨论一个话题:如何应对海量数据?特别是一些需要存储大量用户数据的行业,金融、电信、保险等热门行业。用户几乎在一天的每个小时,都有可能产生大量数据,这些行业的存储设备,必须要将期间产生的数据一丝不苟地记录下来。随着数据量的迅速增加,很多行业用户开始想办法变“数”为宝,从海量数据中挖掘有价值的信息。 如果仅仅是海量的结构性数据,那么解决的办法就比较的单一,用户通过购买更多的存储设备,提高存储设备的效率等解决此类问题。然而,当人们发现数据库中的数据可以分为三种类型:结构性数据、非结构性数据以及半结构性数据等复杂情况时,问题似乎就没有那么简单了。 大数据汹涌来袭 当类型复杂的数据汹涌袭来,那么对于用户IT系统的冲击又会是另外一种处理方式。很多业内专家和第三方调查机构通过一些市场调查数据发现,大数据时代即将到来。有调查发现,这些复杂数据中有85%的数据属于广泛存在于社交网络、物联网、电子商务等之中的非结构化数据。这些非结构化数据的产生往往伴随着社交网络、移动计算和传感器等新的渠道和技术的不断涌现和应用。 如今大数据的概念也存在着很多的炒作和大量的不确定性。为此,编者详细向一些业内专家详细了解有关方面的问题,请他们谈一谈,大数据是什么和不是什么,以及如何应对大数据等问题,将系列文章的形式与网友见面。 有人将多TB数据集也称作"大数据"。据市场研究公司IDC统计,数据使用预计将增长44倍,全球数据使用量将达到大约35.2ZB(1ZB = 10亿TB)。然而,单个数据集的文件尺寸也将增加,导致对更大处理能力的需求以便分析和理解这些数据集。 EMC曾经表示,它的1000多个客户在其阵列中使用1PB(千兆兆)以上的数据数据,这个数字到2020年将增长到10万。一些客户在一两年内还将开始使用数千倍多的数据,1EB(1艾字节 = 10亿GB)或者更多的数据。 对大企业而言,大数据的兴起部分是因为计算能力可用更低的成本获得,且各类系统如今已能够执行多任务处理。其次,内存的成本也在直线下降,企业可以在内存中处理比以往更多的数据,另外是把计算机聚合成服务器集群越来越简单。IDC认为,这三大因素的结合便催生了大数据。同时,IDC还表示,某项技术要想成为大数据技术,首先必须是成本可承受的,其次是必须满足IBM所描述的三个"V"判据中的两个:多样性(variety)、体量(volume)和速度(velocity)。 多样性是指,数据应包含结构化的和非结构化的数据。 体量是指聚合在一起供分析的数据量必须是非常庞大的。 而速度则是指数据处理的速度必须很快。 大数据"并非总是说有数百个TB才算得上。根据实际使用情况,有时候数百个GB的数据也可称为大数据,这主要要看它的第三个维度,也就是速度或者时间维度。 Garter表示,全球信息量正在以59%以上的年增长率增长,而量是在管理数据、业务方面的显著挑战,IT领袖必须侧重在信息量、种类和速度上。 量:企业系统内部的数据量的增加是由交易量、其它传统数据类型和新的数据类型引发的。过多的量是一个存储的问题,但过多的数据也是一个大量分析的问题。 种类:IT领袖在将大量的交易信息转化为决策上一直存在困扰 – 现在有更多类型的信息需要分析 – 主要来自社交媒体和移动(情景感知)。种类包括表格数据(数据库)、分层数据、文件、电子邮件、计量数据、视频、静态图像、音频、股票行情数据、金融交易和其它更多种类。 速度:这涉及到数据流、结构化记录的创建,以及访问和交付的可用性。速度意味着正在被生成的数据有多快和数据必须被多快地处理以满足需求。 虽然大数据是一个重大问题,Gartner分析师表示,真正的问题是让大数据更有意义,在大数据里面寻找模式帮助组织机构做出更好的商业决策。 诸子百家谈如何定义"大数据" 尽管"Big Data"可以翻译成大数据或者海量数据,但大数据和海量数据是有区别的。 定义一:大数据 = 海量数据 + 复杂类型的数据 Informatica中国区首席产品顾问但彬认为:"大数据"包含了"海量数据"的含义,而且在内容上超越了海量数据,简而言之,"大数据"是"海量数据"+复杂类型的数据。 但彬进一步指出:大数据包括交易和交互数据集在内的所有数据集,其规模或复杂程度超出了常用技术按照合理的成本和时限捕捉、管理及处理这些数据集的能力。 大数据是由三项主要技术趋势汇聚组成: 海量交易数据:在从 ERP应用程序到数据仓库应用程序的在线交易处理(OLTP)与分析系统中,传统的关系数据以及非结构化和半结构化信息仍在继续增长。随着企业将更多的数据和业务流程移向公共和私有云,这一局面变得更加复杂。 海量交互数据:这一新生力量由源于 Facebook、Twitter、LinkedIn 及其它来源的社交媒体数据构成。它包括了呼叫详细记录(CDR)、设备和传感器信息、GPS 和地理定位映射数据、通过管理文件传输(Manage File Transfer)协议传送的海量图像文件、Web 文本和点击流数据、科学信息、电子邮件等等。 海量数据处理:大数据的涌现已经催生出了设计用于数据密集型处理的架构,例如具有开放源码、在商品硬件群中运行的 Apache Hadoop。对于企业来说,难题在于以具备成本效益的方式快速可靠地从 Hadoop 中存取数据。 定义二:大数据包括A、B、C三个要素 如何理解大数据?NetApp 大中华区总经理陈文认为,大数据意味着通过更快获取信息来使做事情的方式变得与众不同,并因此实现突破。大数据被定义为大量数据(通常是非结构化的),它要求我们重新思考如何存储、管理和恢复数据。那么,多大才算大呢?考虑这个问题的一种方式就是,它是如此之大,以至于我们今天所使用的任何工具都无法处理它,因此,如何消化数据并把它转化成有价值的洞见和信息,这其中的关键就是转变。 基于从客户那里了解的工作负载要求, NetApp所理解的大数据包括A、B、C三个要素:分析(Analytic),带宽(Bandwidth)和内容(Content)。 1. 大分析(Big Analytics),帮助获得洞见 – 指的是对巨大数据集进行实时分析的要求,它能带来新的业务模式,更好的客户服务,并实现更好的结果。 2. 高带宽(Big Bandwidth),帮助走得更快 – 指的是处理极端高速的关键数据的要求。它支持快速有效地消化和处理大型数据集。 3. 大内容(Big Content),不丢失任何信息- 指的是对于安全性要求极高的高可扩展的数据存储,并能够轻松实现恢复。它支持可管理的信息内容存储库、而不只是存放过久的数据,并且能够跨越不同的大陆板块。 大数据是一股突破性的经济和技术力量,它为 IT 支持引入了新的基础架构。大数据解决方案消除了传统的计算和存储的局限。借助于不断增长的私密和公开数据,一种划时代的新商业模式正在兴起,它有望为大数据客户带来新的实质性的收入增长点以及富于竞争力的优势。 转自:http://server.51cto.com/sCollege-300607_1.htm

龙生   25 Jun 2013
View Details

关系型数据库

关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是由埃德加·科德于1970年首先提出的,并配合“科德十二定律”。现如今虽然对此模型有一些批评意见,但它还是数据存储的传统标准。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。 关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。 实体关系模型(Entity-Relationship Model),简称E-R Model是陈品山(Peter P.S Chen)博士于1976年提出的一套数据库的设计工具,他运用真实世界中事物与关系的观念,来解释数据库中的抽象的数据架构。实体关系模型利用图形的方式(实体-关系图(Entity-Relationship Diagram))来表示数据库的概念设计,有助于设计过程中的构思及沟通讨论。 关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。当前主流的关系型数据库有Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。

龙生   25 Jun 2013
View Details

把查询结果保存到文件

EXEC master..xp_cmdshell 'bcp "select top 1 txt from master.dbo.ctest " queryout c:\ctxt.vbs -c -S(local) -Usa -Phbcfsa'

龙生   18 Jun 2013
View Details
1 4 5 6 12