
Sql Server 2008
灰太狼
这个作者很懒,什么都没留下…
展开
-
迟到的Top语句
with c as( select top 100 * from TestTable ) select * from c order by CreateTime desc 按照字面意思,我们需要先从TestTable上取前100条数据,再把这100条数据按时间倒序显示。可实际结果却是先按CreateTime倒序,然后取后100条数据。也就是说,我们需要的结果是100~1,但是实际结果却是999~900。原创 2010-06-04 11:57:00 · 23567 阅读 · 15 评论 -
SQL Server中GO的使用方法
GO不是标准SQL语句,甚至不是T-SQL语句。它只是SQL Server管理器(SSMS)中用来提交T-SQL语句的一个标志。你可以在SSMS中任意指定这个提交标志。SSMS->工具->选项->查询执行->SQL Server->批分隔符中指定这个提交标志。如下图: 除了提交外,GO还可以指定提交的次数。比如select * from tablego 2原创 2010-04-06 14:50:00 · 30766 阅读 · 3 评论 -
在SQL Server中使用自定义数据类型来规范数据库字段变量
我们在设计数据库或是设计表时,经常会遇到同一个字段出于某种原因出现在不同表中的情况。比如SchoolName varchar(50),出现在tblSchoolBase、tblSchoolReport、tblSchoolExpert……表中。这样就很难保证在不同表中SchoolName字段的一致性。比如有些表中是varchar(32),有些是char(32)等。数据类型的不一致会导致数据原创 2010-03-29 20:02:00 · 24255 阅读 · 3 评论 -
SQL Server 中关于EXCEPT和INTERSECT的用法
熟练使用SQL Server中的各种用法会给查询带来很多方便。今天就介绍一下EXCEPT和INTERSECT。注意此语法仅在SQL Server 2005及以上版本支持。EXCEPT是指在第一个集合中存在,但是不存在于第二个集合中的数据。INTERSECT是指在两个集合中都存在的数据。测试如下:create table t1(id int,mark char(2))gocr原创 2010-03-04 15:08:00 · 90873 阅读 · 7 评论 -
SQL Server 2008行数据和页数据压缩解密
SQL Server的性能主要取决于磁盘I/O效率,提高I/O效率某种程序上就意味着提高性能。SQL Server 2008提供了数据压缩功能来提高磁盘I/O。数据压缩意味着减小数据的有磁盘占用量,所以数据压缩可以用在表,聚集索引,非聚集索引,视图索引或是分区表,分区索引上。数据压缩可以在两个级别上实现:行级别和页级别。页级别压缩包括行级别压缩。表和索引在创建的同时就可以压缩,也可以使用A原创 2010-03-04 13:52:00 · 19399 阅读 · 5 评论 -
SQL Server 如何在运行时重编译存储过程
有两种方法动态重编译存储过程: 1.在Create时加上RECOMPILE选项 CREATE PROCEDURE dbo.PersonAge (@MinAge INT, @MaxAge INT) WITH RECOMPILE AS SELECT * FROM dbo.tblTable 2.在执行时加上RECOMPILE选项 EXEC dbo.Perso原创 2010-03-04 11:56:00 · 19751 阅读 · 1 评论 -
SQL Server里面的U锁
X锁即是我们常说的排它锁,U锁很少见,只在更新时会出现。U锁其实是X锁的一种,当数据更新时,U锁首先加到要更新的数据上(即使目标上面有S锁,U锁还是可以加上),等目标可以被更新时,U锁即转变为X锁。 如需转载,请注明本文原创自CSDN TJVictor专栏:http://blog.csdn.net/tjvictor原创 2010-03-04 11:52:00 · 19261 阅读 · 1 评论 -
SQL Server 优化存储过程的七种方法
优化存储过程有很多种方法,下面介绍最常用的7种。1.使用SET NOCOUNT ON选项我们使用SELECT语句时,除了返回对应的结果集外,还会返回相应的影响行数。使用SET NOCOUNT ON后,除了数据集就不会返回额外的信息了,减小网络流量。2.使用确定的Schema在使用表,存储过程,函数等等时,最好加上确定的Schema。这样可以使SQL Server直接找到对应目标,避原创 2010-03-04 11:42:00 · 12239 阅读 · 3 评论 -
如何在未加入域的机器上使用集成认证来登陆SQL Server
一般使用SQL Server的集成认证时,都需要登陆进域,下面介绍一种不需要登陆域就可以使用域用户登陆SQL Server的方法。SQL Server Management Studio 2005和2008的快捷方式如下图: SQL Server 2008 x64: "C:/Program Files (x86)/Microsoft SQL Server/100/Tools/Bi原创 2010-03-01 10:42:00 · 3344 阅读 · 3 评论 -
SQL Server中关于的checkpoint使用说明
在SQL Server中有一个非常重要的命令就是CheckPoint,它主要作用是把缓存中的数据写入mdf文件中。其实在我们进行insert, update, delete时,数据并没有直接写入数据库对应的mdf文件中,而是写入了缓存里,这有点像电驴,因为过于频繁的写入会使磁盘的寿命大大减小。 从上图可以直观的看出。只有当发生checkpoint时,数据才会被写入mdf数据文件。原创 2010-01-18 21:26:00 · 17668 阅读 · 1 评论 -
SQL Server 行列转换示例
SQL Server的行列转换功能非常实用,但是由于其语法不好懂,使很多初学者都不愿意使用它。下面我就用示例的形式,逐一展现Pivot和UnPivot的魅力。如下图 由于近期CSDN的图片服务器不稳定,如果图片挂了,请读者访问图片原地址:http://img242.ph.126.net/4isS79TpI8jxQViyLD410Q==/2136958023189057751.jpg原创 2010-01-13 17:26:00 · 4849 阅读 · 12 评论 -
SQL Server如何跨实例访问数据库
在我们日常使用SQL Server数据库时,经常遇到需要在实例Instance01中跨实例访问Instance02中的数据。例如在做数据迁移时,如下语句:insert into Instance01.DB01.dbo.Table01 select * from Instance02.DB01.dbo.Table01普通情况下,这样做是不允许的,因为SQL Server原创 2010-01-06 14:27:00 · 13417 阅读 · 8 评论 -
How to Set Up SQL Server 2008 FileStream In the Cluster
Today i meet a very odd problem. i use sql server 2008 filestream in the cluster, when i remove a sql instance form one node to another, the operator is succecced, but the filestream db is disable. wh原创 2009-12-30 08:09:00 · 1424 阅读 · 0 评论 -
SQL Server数据库自动处理外键关系的存储过程
最近总在做数据迁移的工作。做过类似工作的朋友都知道,数据迁移时,表之间的外键约束实在是让你头疼的事。因为你必须要确定表迁移的顺序,否则迁移过程中,总是在报外键约束的错误。即使你把表之间的外键临时drop了,迁移数据后,再create时,就会发现由于数据的不一致,导致外键已经无法创建成功了。 根据我的经验,如果迁移的数据不是那么重要的话或者说允许表中有些不一致数据存在的话,那么不必drop和原创 2009-12-29 13:29:00 · 3114 阅读 · 0 评论 -
SQL Server CLR全功略之五---CLR自定义数据类型
一、这是这个系列的最后一节了,自定义复杂数据类型目前只能通过CLR来实现。为了在 SQL Server 中运行,您的 UDT 必须实现 UDT 定义中的以下要求: 1.该 UDT 必须指定 Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute。System.SerializableAttribute 可选用,但建议使用。 2.U原创 2009-11-13 16:18:00 · 5311 阅读 · 7 评论 -
SQL Server CLR全功略之四---CLR触发器
CLR可以实现DML和DDL两种触发形式,但是本人一般不建议使用CLR的触发器,主要是考虑到效率问题。比如我们使用trigger来实现发mail等操作时,就要考虑pop3或是smtp等待时间,因为trigger本事就是个事务,也就是说,在smtp等待时间也算在了整个事务中,这样就会大大影响效率。1.CLR DML触发器DML指的是数据操作语言,也就是通常的insert,update和del原创 2009-11-10 21:23:00 · 8578 阅读 · 5 评论 -
SQL Server CLR全功略之三---CLR标量函数、表值函数和聚合函数(UDA)
本节主要介绍使用CLR创建标量函数,表值函数和聚合函数。所谓标量函数指的就是此函数只返回一个值。表值函数返回值是一个表。聚合函数是在select语句中使用的,用来聚合一个结果集,类似于Sum()或是Count()等内置的函数,而且真正的自定义聚合函数目前只能用CLR来实现。下面的例子使用了SQLServer自带的pubs数据库。1.CLR标量函数1.1无参函数 ///原创 2009-11-10 14:04:00 · 12069 阅读 · 4 评论 -
SQL Server CLR全功略之二---CLR存储过程
从这一节开始呢,我们就要开始CLR的编程之旅了。在这之前,我先把本节中需要了解的两个新类SqlDataRecord和SqlMetaData,及五个新方法SqlContext.Pipe.SendResultsStart,SqlContext.Pipe.SendResultsRow,SqlContext.Pipe.SendResultsEnd,SqlContext.Pipe.Send和SqlConte原创 2009-10-26 22:14:00 · 15170 阅读 · 2 评论 -
SQL Server CLR全功略之一---CLR介绍和配置
Microsoft SQL Server 现在具备与 Microsoft Windows .NET Framework 的公共语言运行时 (CLR) 组件集成的功能。CLR 为托管代码提供服务,例如跨语言集成、代码访问安全性、对象生存期管理以及调试和分析支持。对于 SQL Server 用户和应用程序开发人员来说,CLR 集成意味着您现在可以使用任何 .NET Framework 语言原创 2009-10-25 22:04:00 · 24966 阅读 · 5 评论 -
SQL连接字符串大全
自己看吧。市面上能找到的大部分数据库都在这里了。 http://www.connectionstrings.com/附个图。无图无真相。转载 2009-10-25 16:21:00 · 2171 阅读 · 0 评论 -
使用SQLServer模板来写规范的SQL语句
如果你经常遇到下面的问题,你就要考虑使用SQL Server的模板来写规范的SQL语句了:SQL初学者。经常忘记常用的DML或是DDL SQL 语句。在多人开发维护的SQL中,每个人都有自己的SQL习惯,没有一套统一的规范。在SQL Server Management Studio中,已经给大家提供了很多常用的现成SQL规范模板。SQL Server Managemen原创 2009-09-15 14:43:00 · 8870 阅读 · 24 评论 -
XML 数据类型方法"modify" 的参数1 必须是字符串文字
在使用XML的modify方法时,无法使用变量来替代相应的参数。只能使用动态SQL来解决这个问题。 declare @XmlContent xml = declare @InsertContent varchar(1024) = insert ttt as last into (/root[1]); 如果执行:set @XmlContent原创 2009-09-02 20:59:00 · 4678 阅读 · 0 评论 -
SQL Server Job运行成功或失败时发送电子邮件通知
虽然我们可以通过Job日志来查看SQL Server Job运行成功或是失败,但是人工主动去查没有及时性,也不智能化。下面简单介绍一下如何设置SQL Server的邮件通知,让Job完成后,自动发送状态邮件。SQL Server 2005的设置如下: 1.运行SQL Server Surface Area Configuration->Surface Area Configura原创 2009-09-01 19:54:00 · 14711 阅读 · 1 评论 -
SQL Server 触发器:表的特定字段更新时,触发Update触发器
create trigger TR_MasterTable_Updateon MasterTableafter updateas if update ([Type])--当Type字段被更新时,才会触发此触发器 insert into MasterLogTable select Id ,(Case [Type] when 1 then Type1 when 2 then Ty原创 2009-08-26 10:22:00 · 36490 阅读 · 0 评论 -
如何把数据批量插入具有Identity列的表
1.把表的IDENTITY_INSERT选项设置为ON2.插入时要指定相应的列名 示例如下:1.建表,初始化数据: create table InsertTable1 ( Id int identity(1,1), Mark varchar(10) ) create table InsertTable2 ( Id int identity(1,1), Mark varchar(10原创 2009-08-11 09:30:00 · 2212 阅读 · 0 评论 -
在SQL Server 事务中使用Savepoints来保存提交点
在SQL Server中使用rollback会回滚所有的未提交事务状态,但是有些时候我们只需要回滚部分语句,把不需要回滚的语句提到事务外面来,虽然是个方法,但是却破坏了事务的ACID。其实我们可以使用SQL Server中的Savepoints来解决上述问题。示例如下:1.先建立测试表: CREATE TABLE [dbo].[ttt]( [Id] [int] NULL,原创 2009-08-10 09:28:00 · 4608 阅读 · 0 评论 -
使用SQL Server 2008中的hierarchyid类型来设计具有树型层次关系的表
本文主要讲述三个内容: 1.如何创建hierarychyid的表,插入数据及基本递归查询。 2.介绍hierarchyid的10种专有函数。 3.介绍hierarchyid特有的深度优先索引(Depth-First Indexing)和广度优先索引(Breadth-First Indexing) 在上一节中 http://blog.csdn.net/tjvictor/archive/200原创 2009-07-30 23:11:00 · 8629 阅读 · 5 评论 -
SQL Server中如何存储具有层次关系的表
SQL Server是关系型数据库,适合存储二维表格的关系型数据,不适合存储具有层次关系的数据,那么如何利用SQL Server存储如下图所示的树型层次关系呢?目前利用SQL Server存储树型关系数据比较成熟的方案是利用主键+外键的方式,即主键存储一个唯一Id值,外键存储此Id的父节点Id值,如果此节点无父节点,则为null。表设计如下: Create Database TestDb;原创 2009-07-30 23:10:00 · 5361 阅读 · 2 评论 -
SQL Server 中.与::的区别
SQL Server中调用方法时,经常遇到.或是::两种调用方法,其中. 是实例调用方法,::是静态调用方法。如果大家对C#语法熟悉的话,. 对应C#中调用实例方法,:: 对应C#中的static方法。下面给出一个SQL Server的实例,下面的SQL运行在2008环境下:DECLARE @g geography; SET @g = geography::Parse(LINESTRIN原创 2009-07-29 14:34:00 · 5568 阅读 · 0 评论 -
SQL Server 2008中如何为XML字段建立索引
SQL Server中的XML索引分为两类:主XML 索引和辅助XML索引。其中辅助XML索引又分为:PATH 辅助XML索引,VALUE 辅助XML索引,PROPERTY辅助XML索引。 创建XML索引的语法示例如下:create table XMLTable(Id int primary key, XMLCol xml);go--XML主索引creat原创 2009-07-22 15:54:00 · 6729 阅读 · 1 评论 -
SQL Server 中对XML数据的五种基本操作
1.xml.exist 输入为XQuery表达式,返回0,1或是Null。0表示不存在,1表示存在,Null表示输入为空 2.xml.value 输入为XQuery表达式,返回一个SQL Server标量值 3.xml.query 输入为XQuery表达式,返回一个SQL Server XML类型流 4.xml.nodes 输入为XQuery表达式,返回一个XML格式文档的原创 2009-07-21 21:37:00 · 13812 阅读 · 1 评论 -
如何对SQL Server中的XML数据进行insert、update、delete
SQL Server 2005/2008增加了对XML数据的支持,同时也新增了几种操作XML的方法,本文主要以SQL Server 2008为例介绍如何对XML数据进行insert、update、delete。 SQL Server中新增加了XML.Modify()方法,分别为xml.modify(insert),xml.modify(delete),xml.modify原创 2009-07-21 21:31:00 · 8213 阅读 · 0 评论 -
SQL Server使用Merge语句当源表数据集为空时,无法进行查询的问题
今天使用Merge语句时遇到了一个问题,当源表数据集为空时,merge就不工作了。下面举一个例子来具体说明一下:有两个表SourceTable为登陆表,TargetTable为授权表,如果访问用户在登陆表中,更新授权表的授权级别,否则授权0表示游客。sql语句如下:--SourceTable为登陆表,TargetTable为授权表--如果访问用户在登陆表中,更新授权表的授权级别,否原创 2009-07-21 15:48:00 · 3317 阅读 · 0 评论 -
SQL Server 批量插入数据的两种方法
在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题。下面介绍SQL Server支持的两种批量数据插入方法:Bulk和表值参数(Table-Valued Parameters)。运行下面的脚本,建立测试数据库和表值参数。--Create DataBasecreate d原创 2009-07-18 17:58:00 · 168925 阅读 · 31 评论 -
SQL Server 服务器及数据库用户角色权限
Server Role Description bulkadmin Members can run the BULK INSERT statement. Membership in this role still requires that non-sysadmin users have access to th原创 2009-07-15 17:22:00 · 2987 阅读 · 0 评论 -
SQL Server 2008 新增T-SQL 简写语法
1.定义变量时可以直接赋值DECLARE @Id int = 5 2.Insert 语句可以一次插入多行数据INSERT INTO StateList VALUES(@Id, WA), (@Id + 1, FL), (@Id + 2, NY) 3.支持+=操作符SET StateId += 1 完整示例如下:CREATE TABLE StateL原创 2009-07-14 11:22:00 · 3076 阅读 · 0 评论 -
SQL Server 2008 Merge语句的OUTPUT功能
SQL Server 2005中的Output功能可以把Insert,Update和Delete的内容都返回,2008中的Output同样具有此功能,下面介绍一下把Output同2008的新T-SQL语句Merge组合使用的方法:新建下面表:CREATE TABLE Book( ISBN varchar(20) PRIMARY KEY, Price decimal,原创 2009-07-13 16:50:00 · 5036 阅读 · 0 评论 -
SQL Server 2008 新类型介绍之Date和Time
SQL Server 2008除了DateTime和SmallDateTime之外,又新增了四种时间类型,分别为:date,time,datetime2和datetimeoffset。各时间类型范围、精度一览表:数据类型时间范围精度datetime1753-01-01到9999-12-31 00:00:00 到 23:59:59.9973.33毫秒原创 2009-07-13 14:42:00 · 24623 阅读 · 3 评论 -
在SQL Server 中使用EVENTDATA()函数来获取DDL 触发器信息
SQL Server 2005/2008中可以使用EVENTDATA函数来获取DDL触发器的上下文,从而在ROLLBACK之前截获DDL信息。EVENTDATA返回XML字段,下面的例子显示如何截获Drop Table的DDL信息。-- Create a log tableCREATE TABLE TriggerLog (LogInfo xml)-- Create a dummy原创 2009-07-08 16:54:00 · 4247 阅读 · 0 评论 -
SQL Server 排序函数 ROW_NUMBER和RANK 用法总结
下面的例子和SQL语句均在SQL Server 2008环境下运行通过,使用SQL Server自带的AdventureWorks数据库。转载请注明此文原创自CSDN TJVictor的专栏:http://blog.csdn.net/tjvictor/archive/2009/07/08/4331039.aspx 1.ROW_NUMBER()基本用法:SELECT Sales原创 2009-07-08 14:11:00 · 18592 阅读 · 1 评论