SQLServer
文章平均质量分 61
jinjazz
这个作者很懒,什么都没留下…
展开
-
SQLServer中的Scanf和Printf
SQLServer中有两个扩展存储过程实现Scanf和Printf功能,恰当的使用它们可以在提取和拼接字符串时大幅度简化SQL代码。 1、xp_sscanf,用它可以分解格式相对固定的字符串,这对于厌倦使用一堆substring和charindex的朋友来说不错。比如前几天的一个帖子中提出的如何分解ip地址,相对简练且通用的代码应该是下面这样原创 2009-08-18 03:01:00 · 2343 阅读 · 5 评论 -
SQLServer中的循环批处理
GO命令后面加一个常量就可以了 下面方法可以用来快速生成一批数据 if(object_id(t) is not null) drop table t go create table t(id int identity(1,1),name varchar(40)) go原创 2009-08-12 22:32:00 · 2211 阅读 · 3 评论 -
18句话入门SQLServer XML
/* sql xml 入门: --by jinjazz --http://blog.csdn.net/jinjazz 1、xml: 能认识元素、属性和值 2、xpath: 寻址语言,类似windows目录的查找(没用过dir命令的话就去面壁)原创 2009-08-13 17:05:00 · 6092 阅读 · 12 评论 -
从两种SQL表连接写法来了解过去
由朋友提出此类问题 http://topic.csdn.net/u/20090806/09/cd21b02c-e321-46d7-924a-82fd442b0a41.html select * from a,b where a.id=b.id select * from a inner join b on a.id=b.id ---这两个哪个好?原创 2009-08-10 12:42:00 · 3801 阅读 · 2 评论 -
SQL2005CLR函数扩展-天气服务
我们可以用CLR获取网络服务 来显示到数据库自定函数的结果集中,比如163的天气预报http://news.163.com/xml/weather.xml 他的这个xml结果的日期是不正确的,但这个我们暂不讨论。 从这个xml获取天气的CLR代码如下,用WebClient访问一下就可以了。然后通过Dom对象遍历节点属性返回给结果集。 Norm原创 2009-05-14 23:40:00 · 2049 阅读 · 5 评论 -
SQL2005CLR函数扩展-山寨索引
本文只是一个山寨试验品,思路仅供参考. 对于文件索引lucene才是权威,这里只是自己实现了一个可以实现简单文件索引的半成品.所谓文件索引就是把sql字符串按字节分词保存到磁盘文件目录结构中用来快速定位. 原理介绍: 索引建立 目录结构划分方案也只是很简易的实现了一下,通过unicode把任意连续的两个字符(中文或英文)分为4个字节原创 2009-05-18 19:16:00 · 1199 阅读 · 1 评论 -
SQL2005CLR函数扩展-繁简转换
这个方法比较简单,用Microsoft.VisualBasic命名空间下强大的字符串处理函数就可以了 c#代码如下,编译为BigConvertor.dll Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE原创 2009-05-12 17:23:00 · 1289 阅读 · 0 评论 -
SQL2005CLR函数扩展-树的结构
树结构广泛用在各类分级管理设计中。但他的展现方式也是很让人头疼的事情。比如展开一个靠id和parentid建立关系的分级树,SQL2005已经可以用CTE来递归查询。我们看如下测试代码: Normal 0 7.8 磅 0 2 false false false EN-US原创 2009-04-28 19:17:00 · 2182 阅读 · 1 评论 -
SQL2005CLR函数扩展-数据导出
SQLServer数据导出到excel有很多种方法,比如dts、ssis、还可以用sql语句调用openrowset。我们这里开拓思路,用CLR来生成Excel文件,并且会考虑一些方便操作的细节。 下面我先演示一下我实现的效果,先看测试语句 Normal 0 7.8 磅 0 2 false fal原创 2009-04-29 22:06:00 · 2539 阅读 · 5 评论 -
SQL2005CLR函数扩展-环比计算
环比就是本月和上月的差值所占上月值的比例。在复杂的olap计算中我们经常会用到同比环比等概念,要求的上个维度的某个字段的实现语句非常简练,比如ssas的mdx语句类似[维度].CurrentMember.Prevmember就可以了。此类问题还可以延伸到类似进销存的批次计算中,这也要关注其他历史记录来决定当前某条记录的状态。 sql语句无法简单实现mdx语句的类似功能原创 2009-04-28 11:35:00 · 2769 阅读 · 0 评论 -
SQL2005CLR函数扩展-字符串函数
sql语句的字符串函数远远没有开发语言的强大,我们可以通过clr来扩展。怎么使用clr写自定义函数我这里就不讲了,不清楚的可以看我之前的blog。下面这个类库可以大大的增强sql语言的函数库,比如字符串的查找更改,时间和数字的格式化等。因为都是一些.Net的基本函数,注释我就不写了,不清楚直接看里面调用的c#函数的注释就可以了^&^ Normal 0原创 2009-04-23 00:33:00 · 1991 阅读 · 0 评论 -
SQL2005CLR函数扩展-正则表达式
用过Oracle的人都知道Oracle有四个正则表达函数REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和EGEXP_REPLACE,而SQLServer却无法完全实现上面的功能。以前我们知道用sp_OAxxx系列函数来调用js组建实现正则,现在我们可以通过CLR扩展来借助.Net实现。 ※代码很简单,就是封装一下System.Te原创 2009-04-22 22:01:00 · 5452 阅读 · 2 评论 -
SQL2005使用CLR函数获取行号
行号可以广泛使用在分页或者报表当中。SQL2005使用Row_Number来获取,但这个需要配合Order来处理,数据量大的情况下可能会影响性能。 要实现CLR自定函数返回行号的关键问题是一个自增长的序列如何保存,并且需要考虑并发和释放的问题。这里我用了一个静态的集合来保持这个事物,缺点是每次查询必须初始化一个集合的随机Key,并在本次查询后销毁。 如果你还不知道CLR函数如何使用原创 2009-04-16 01:22:00 · 4239 阅读 · 2 评论 -
.Net的DataSet直接与SQL2005交互
DataSet在无适配器的情况下需要与SQL2005数据库交互,可以通过SQL语句分解DataSet序列化之后的xml来生成查询结果集,然后去批量更新或者追加数据。 测试代码如下 Normal 0 7.8 磅 0 2 false false false EN-US原创 2009-04-02 23:24:00 · 3184 阅读 · 0 评论 -
SQLServer任意列之间的聚合
sql的max之类的聚合函数只能针对同一列的n行运算,如果对n列运算,一般都用case 语句来判断,如果列少还比较容易写,列多了就麻烦了。这里介绍一个通过xml合并列并转为行集后直接用聚合函数求值的方法,测试用例和代码如下 Normal 0 7.8 磅 0 2 false false fals原创 2009-03-27 23:16:00 · 1992 阅读 · 0 评论 -
NULL在SQLServer数据库数据文件中的存储
这个对于定长和不定长字段来说是两个结果定长字段Null要占足字段空间,不定长字段则不占空间,两者都是通过null_bitmap来确认行数据中的null列。这个很容易用事实表的大小来验证。其具体存储机制还是需要dbcc来查看数据页。我们分几种情况查看: Normal 0 7.8 磅 0 2原创 2009-03-18 16:13:00 · 2036 阅读 · 0 评论 -
SQLServer批量倒入目录文件
可以用扩展存储过程xp_dirtree获取文件列表,用openrowset倒入数据到二进制字段。openrowset的用法可以参考msdnhttp://technet.microsoft.com/zh-cn/library/ms190312.aspx如果文件很多,建议还是用程序倒入了 Normal 0 7.8原创 2009-08-18 18:13:00 · 1480 阅读 · 1 评论 -
SQLServer中求两个字符串的交集
代码高亮有点问题,测试时把@ str替换为@str使用javascript的数组来计算,代码如下: use tempdb go if (object_id (fn_getArray ) is not null ) drop function dbo . fn_getArray go原创 2009-08-26 15:08:00 · 4634 阅读 · 0 评论 -
SQLServer2005的Output子句获取刚插入的ID值
语法很简单,比如 declare @t table(id uniqueidentifier default newid(),name varchar(100)) insert into @t(name) output inserted.id select jinjazz union select原创 2009-08-25 14:44:00 · 2462 阅读 · 5 评论 -
SQL递归游戏-你厉害吗,来过5关
5个flash的游戏地址是http://www.sostart.com/article/view.php/765此类游戏一般都是通过穷举或者递归之类的方法来求解,对于编成语言来说都比较简单。这里用SQL语言的CTE递归来玩玩看。原创 2010-07-28 12:36:00 · 19099 阅读 · 112 评论 -
SQL2008的数据更新跟踪测试
最近一个项目中需要监测SQLServer数据库中某些表的数据更新情况,于是做了一番POC测试和简单性能的评估.这里使用的是 SQLServer2008的更改跟踪.因为需求原因,没有考虑使用进一步的变更数据捕获. POC过程如下:这里我们建立一个测试环境,模拟数据在 Insert , Update 和 Delete 情况下的跟踪效果。1 、测试脚本的准备,下面脚本建立原创 2010-04-17 10:24:00 · 6147 阅读 · 9 评论 -
关于SQL语句Count的一点细节
count语句支持*、列名、常量、变量,并且可以用distinct关键字修饰, 并且count(列名)不会累计null的记录。下面随便用一些例子示范一下count的规则:比如对如下表做统计,所有列这里都用sql_variant类型来表示。 if(object_id(t_test)>0) drop table t_原创 2009-09-16 15:44:00 · 15838 阅读 · 21 评论 -
charindex代替like并非"更快更全面"
最近csdn的编辑们在社区和网站首页的标题让人有些受不了,一个吸引眼球的大红专题点进去只是一个聊聊数字的普通帖子..这种做法用来八卦也就算了,用来包装技术文章那是相当不负责的。 一个普普通通的技术博文,不管观点对错,水平如何,作者的拿出来分享的做法是值得肯定的,但在没有经过论证,人为在加上一个漂亮的副标题打到技术专区的首页上,难免误导不明真相的群众。原创 2009-09-14 13:09:00 · 14969 阅读 · 17 评论 -
SQLServer2005中的几个统计技巧
先看下面的一个表格,我们从左边的两列信息来统计出右边的结果。 在SQLServer中我们可以用over子句中来代替子查询实现来提高效率,over子句除了排名函数之外也可以和聚合函数配合。实现代码如下: use tempdb go if(object_id(tb) is not原创 2009-09-03 21:08:00 · 7223 阅读 · 9 评论 -
SQLServer数据集合的交、并、差集运算
SQLServer2005通过intersect,union,except和三个关键字对应交、并、差三种集合运算。他们的对应关系可以参考下面图示 相关测试实例如下: use tempdb go if(object_id(t1) is not null) drop table t1原创 2009-09-07 15:32:00 · 19797 阅读 · 3 评论 -
SQLServer2005的查询独占模拟
这个问题一直被很多人关注,基本上得到的答案是两种倾向,一种是锁一种是给记录打标记(也就是update)。对于应用来说,我并不提倡人为给记录加锁,这样会惹来很多麻烦,况且锁并不能解决所有问题,如果你有这方面好的经验我们可以进一步交流。 而update的过程会自动加锁,这个给我们带来和极大便利,但该方法一直不被人们认可的原因是效率:比如打标记怎么打,是否需要每个终端给数据印上各原创 2009-09-04 20:34:00 · 3873 阅读 · 1 评论 -
SQLServer2005的Top功能
所有人都知道select top 的用法,但很多人还不知道update top 和 delete top 怎么用。以往的做法是set rowcount来指定,其实SQL2005中对于Top语句的增强除了参数化之外还包括对update和delete的支持,但可惜的是还不支持自定义的order by列。如果要自定义派序列可以借助CTE.对于CTE的任何更改都会影响到原始表。原创 2009-09-04 20:06:00 · 4410 阅读 · 6 评论 -
拆解组装SQL字符串全过程
先看下面这段代码, 它将sql字符串先分割为行集,做一定处理后再合并为单行: use tempdb go if(object_id(t_Item) is not null) drop table t_item go if(obj原创 2009-09-01 15:46:00 · 6011 阅读 · 6 评论 -
SQLServer获取Excel中所有Sheet
E盘根目录新建一个Excel文件aa.xls后测试如下代码 use tempdb go if(object_id(udf_getExcelTableNames) is not null) drop function dbo.udf_getExcelTableNames go create f原创 2009-08-31 14:53:00 · 4672 阅读 · 4 评论 -
SQLServer字符串批量拆分得方法
其实拆分和批量拆分的方法是一样的,所谓批量就是用out apply来调用单个拆分函数。 /* SQLServer字符串拆分函数,by jinjazz --原始数据 id names ----------- -------------------- 1 jinjazz,blog,csdn 2原创 2009-08-27 19:27:00 · 3380 阅读 · 3 评论 -
SQLServer获取每组前10%的数据
sqlserver2005有关键字ntile(x)和over(partition by.. order by..)子句配合. 比如获取每个表的前10%个字段。 select id,name,colid,rn from( select *,rn=ntile(10) over(partition原创 2009-08-28 17:27:00 · 10399 阅读 · 1 评论 -
存储过程中的行集作为子查询
可以使用Openrowset,但Openrowset不支持参数话的语句,要实现参数只能在客户端程序中把要的最终语句拼接好传入。实际应用中,我用openrowset连接ssas服务器来和sqlserver数据库对象实现交互。测试语句如下: use tempdb go create proc p_test as begin原创 2009-08-27 14:36:00 · 3735 阅读 · 0 评论 -
被遗忘的SQLServer比较运算符修饰词
SQLServer中有三个关键字可以修改比较运算符:All、Any和Some,其中Some和Any等价。官方的参考文档http://technet.microsoft.com/zh-cn/library/ms187074%28SQL.90%29.aspx 他们作用于比较运算符和子查询之间,作用类似Exists、not exists、in、not in以及其他逻辑意义,这些语法同原创 2009-08-26 16:12:00 · 3859 阅读 · 2 评论 -
SQLServer2005批量查询自定义对象脚本
使用系统函数object_definition和系统表 sysobjects 就可以了object_definition的官方参考http://msdn.microsoft.com/zh-cn/library/ms176090.aspx以下代码可以批量查看或者导出视图、存储过程、触发器和函数的脚本原创 2009-08-26 14:54:00 · 2843 阅读 · 0 评论 -
SQLServer设置单词首字母大写
能实现效果的方法有很多种,这里借用Js的正则表达式来处理. /* --SQLServer中将字符串首字母设置大写: --作者:jinjazz /csdn --SQLServer2005启用OLEAutomation sp_configure show advanced options, 1; go RECONFIGUR原创 2009-08-25 14:06:00 · 4402 阅读 · 3 评论 -
NULL在SQLServer数据库日志文件中的存储
日志文件ldf中的null 参考日志文件结构http://blog.csdn.net/jinjazz/archive/2008/08/07/2783872.aspx 通过null_bitmap来确定哪些字段为null,所以在日志中null是不占空间的。下面可以在得到一行二进制内容,比如通过fn_dbLog函数或者dbcc checklog,然后检查此行内容那些是列是null sta原创 2009-03-18 15:53:00 · 2126 阅读 · 0 评论 -
数据库字段的正则批量替换例子
123568替换为123568最直接的方法就是想到正则表达式如果是SQLServer则不直接支持,可以借助js的com组件<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-fo原创 2008-12-26 14:20:00 · 3841 阅读 · 3 评论 -
图解SQLServer2005获取WebService数据
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE原创 2008-12-23 12:36:00 · 6922 阅读 · 13 评论 -
用c#读取并分析sql2005日志
用过logExplorer的朋友都会被他强悍的功能吸引,我写过一篇详细的操作文档可以参考http://blog.csdn.net/jinjazz/archive/2008/05/19/2459692.aspx我们可以自己用开发工具来实现sql日志的读取,这个应用还是很酷的,具体思路1、首先要了解一个没有公开的系统函数::fn_dblog,他可以读取sql日志,并返回二进制的行数据2、然后要了解sq原创 2008-08-07 18:58:00 · 17936 阅读 · 28 评论 -
用ADO向Excel批量导入数据
和前面一篇用OleDB的方法类似,我们可以用ADO从RecordSet对象向Excel批量插入数据,这个方法无法自动复制字段名。我们需要引用ADO和Excel的com对象参考代码如下using System;using System.Collections.Generic;using System.Text;using S原创 2008-08-06 12:03:00 · 5271 阅读 · 6 评论