显示数据库中的表结构(新增了索引及表的描述信息)
SELECT 表名=case when a.colorder=1 then d.name else '' end, 表说明=case when a.colorder=1 then isnull(f.value,'') else '' end, 字段序号=a.colorder, 字段名=a.name, 标识=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end, 主键=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in ( SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid ))) then '√' else '' end, 类型=b.name, 占用字节数=a.length, 长度
搜索某个字符串在那个表的那个字段中
--搜索某个字符串在那个表的那个字段中declare @str varchar(100)set @str='White' --要搜索的字符串declare @s varchar(8000)declare tb cursor local forselect s='if exists(select 1 from ['+b.name+'] where ['+a.name+'] like ''%'+@str+'%'') print ''所在的表及字段: ['+b.name+'].['+a.name+']'''from syscolumns a join sysobjects b on a.id=b.idwhere b.xtype='U' and a.status>=0 and a.xusertype in(175,239,231,167)open tbfetch next from tb into @swhile @@fetch_status=0begin exec(@s) fetch next from tb into @
查询重复记录
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_qry]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)drop procedure [dbo].[p_qry]GO/*--查询重复记录的通用存储过程 可以查询出表中那些数据是重复的,这里的重复,是指除主键外重复的记录 如果表中有主键,请指定主键. 如果表中有标识字段,而且标识字段无重复,请在调用时,将主键指定为标识字段 如果标识字段重复,不能用此存储过程-- 2004.4--*/create proc p_qry@tbname sysname, --要查询的表名@keyfdname sysname=null --表中的主键,如果未指定,则表中无主
在临时表的指定字段前面插入字段
问题描述: 使用下面的代码创建一个临时表,怎么样才能在‘长度’字段之前插入一个字段?create table #temp(CODE varchar(50),长度 varchar(50),颜色 varchar(50), 合计 varchar(50))/*- 一般来说,列位置不重要,处理的时候写列的列表就行了。如果一定要处理,则参考下面的示例-*/--创建临时表create table #temp(CODE varchar(50),长度 varchar(50),颜色 varchar(50), 合计 varchar(50))--添加一列 alter table #temp add 新加字段 varchar(50)go--调整列的位置,把新加字段移动到长度的前面EXEC sp_configure 'allow updates',1RECONF
2. 索引及主键信息
-- ========================================================================-- 索引及主键信息-- 邹建 2005.08(引用请保留此信息)-- ========================================================================SELECT TableId=O.[object_id], TableName=O.Name, IndexId=ISNULL(KC.[object_id],IDX.index_id), IndexName=IDX.Name, IndexType=ISNULL(KC.type_desc,'Index'), Index_Column_id=IDXC.index_column_id, ColumnID=C.Column_id, ColumnName=C.Name, Sort=CASE INDEXKEY_PROPERTY(IDXC.[object
在 SQL Server 2005 中查询表结构及索引
-- 1. 表结构信息查询 -- ========================================================================-- 表结构信息查询-- 邹建 2005.08(引用请保留此信息)-- ========================================================================SELECT TableName=CASE WHEN C.column_id=1 THEN O.name ELSE N'' END, TableDesc=ISNULL(CASE WHEN C.column_id=1 THEN PTB.[value] END,N''), Column_id=C.column_id, ColumnName=C.name, PrimaryKey=ISNULL(IDX.PrimaryKey,N''), [IDENTITY]=CASE WHEN C.is_identity=1 THEN N'
模拟多级表头的分组统计
测试数据create table 单位表 (单位代码 varchar(10),单位名称 varchar(50))insert 单位表 values('01' ,'中国单位') --1级insert 单位表 values('0101' ,'山东单位') --2级insert 单位表 values('010101' ,'山东济南单位') --3级insert 单位表 values('010102' ,'山东青岛单位') --3级insert 单位表 values('01010201','山东青岛即默单位一') --4级insert 单位表 values('01010202','山东青岛即默单位二') --4级insert 单位表 values('0102' ,'山西单位')
无规律自定义分段的分类汇总+交叉表处理
--测试数据create table tb(编号 int,性质 varchar(10),数量 int,指标1 decimal(10,1),指标2 decimal)insert tb select 1 ,'00' ,10,1.1 ,10union all select 2 ,'01' ,20,1.2 ,20union all select 3 ,'00' ,30,1.5 ,10union all select 4 ,'01' ,40,1.9 ,35union all select 5 ,'00' ,40,1.2 ,20/*--处理要求要求得到下述结果:a 范围 性质(00) 性质(01) ----------------- ---------------- -------------- -------------- 指标1 <1.0 .00
两种比较特殊的交叉数据报表处理
--示例数据:CREATE TABLE tb(ID varchar(10),NGNO char(1),QTY int)INSERT tb SELECT '200505','A',10UNION ALL SELECT '200505','B',20UNION ALL SELECT '200505','C',30UNION ALL SELECT '200506','B',10UNION ALL SELECT '200506','C',20UNION ALL SELECT '200506','D',30UNION ALL SELECT '200506','E',40GO交叉数据报表要求1: 按ID列分组,将NGNO列水平显示为多列,但每列由NGNO的大小顺序决定,而不是由NGNO的值决定,对于示例数据,最终的结果要求如下:ID col1 col2 col3 col4---------- ------- ------- ---
限制列数的交叉数据报表
--示例数据:CREATE TABLE test(factoryid varchar(20),bagid int,roll int,number numeric(9,1),UNIQUE(bagid,roll))INSERT test SELECT 'M-CS-11#6/GREEN',1,1, 86UNION ALL SELECT 'M-CS-11#6/GREEN',1,2, 59.5UNION ALL SELECT 'M-CS-11#6/GREEN',1,3, 31.2UNION ALL SELECT 'M-CS-11#6/GREEN',1,4, 42UNION ALL SELECT 'M-CS-11#6/GREEN',1,5, 31UNION ALL SELECT 'M-CS-11#6/GREEN',1,6, 114.3UNION ALL SELECT 'M-CS-11#6/GREEN',2,7, 101UNION ALL SELECT 'M-CS-11#6/GREEN',2,8, 83.9UNION ALL SELECT 'M-CS-11#6
计算查询结果的大小
问题描述: 从数据库中筛选出一部分记录并统计出这部分记录的总大小,用K或M表示,该怎么处理?答: 把检索出现的记录存放到临时表,然后再计算就可以。--示例:--将满足条件的数据存储到临时表 SELECT * INTO # FROM syscolumns--计算处理 EXEC('USE tempdb;EXEC sp_spaceused ''#'' DROP TABLE #')[@more@]
DBUnit在应用间导出导入数据
应用间的数据集成(EAI)通常是两条路子: 一是使用现成的EAI、ETL框架,定义一堆XML格式的映射文件,再写一些特殊转换的transform class。但这样的工程通常比较宏大,用到最后经常会发觉还不如自己写程序快。 二是直接自己写程序用JDBC->SQL转换,快则快矣,但经常会写的比较乱、特别是表多列多的时侯。 所以,我又会用万能老倌DBUnit+Dom4j来导出导入。 DBUnit因为具有xml<-->database的功能,所以很多地方都能够担任。用XML来写EAI,比SQL语句清晰,而且效果和写映射文件差不多,但因为都写在程序里,用不着像EAI框架那
Spring--简单使用quartz实现定时作业
定时批处理作业是J2EE企业应用里很重要的一环,用来在晚间进行财务挂账,数据转存,新闻联播等等操作。 而在Spring里,已经很好的集成了Quartz,简单到像配cron一样,在xml文件里面配一下时间就可以自动执行,不需要写一行代码。Spring对Quartz大刀阔斧的简化堪称范例,Quartz项目组也许可以学习一下。 <bean id="methodInvokingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"><ref be
AndroMDA的意义
AndroMDA带出的最重要的信息是,相对标准的,开源的MDA方案开始可用了,无数程序员不懈的代码自动生成的分散努力,有望纳入一个比较统一的框架内进行。 对比自己的简易版MDA方案: 优点: 1.模型的编写与维护 好处第一是, 以前的模型是自己制定的XML标准,现在是标准的UML语言,谁不想自己的东西标准化一点,谁不想被招安阿。 第二是模型可以使用图形化的工具维护模型了。 2.代码的生成 大家使用Velocity系的Template Engine,只不过它有现成的Cartridge,估计还会不断增加,众人拾柴,比自己孤军奋战,一些大点的模
五个核心部件
核心部件的设计代表了AndroMDA扩展的野心1.Template Engines 目前使用Velocity作为模板语言,支持向其他语言的扩展。2.MetaFascade 提供一个高层的Meta-Data访问API, 支持UML1.3、1.4、2.0等等语法的MOF model并可自行扩展。3 Repositories 支持从XMI文件中读取MOF model,支持其他格式的扩展。4.Cartridge 通过MetaFascade读取元模型,通过模板生成代码的核心。AndroMDA自带了Spring,Hibernate等Cartridge,也可自行扩展。5.Translation-Libraries 把平台无关代码翻译成平台相关代码。比如Hibernate的getXXX()方法的HSQL语
AndroMDA使用过程
1.程序员通过Poseidon or MagicDraw 绘制UML图并导出XMI 或者使用 Schema2XMI工具从数据库生成XMI 在绘制的过程中需要加入AndroMDA所需的StereoType和Table tag,column Tag等。 MagicDraw似乎比较难看,而Poseidon还提供AndroMDA的plug-in,什么功能还没细看。2.用户通过Ant运行AndroMDA Ant脚本除了指明xmi文件外,另一个很重要的节点就是节点,指明了Hibernate,Spring所需的一切项目级资料比如生成目录,数据源名称等。3.AndromMDA解释XMI为相对高层的概念,然后调用Cartridge的Velocity语法模板的生成目标代码文件。 目前提供E
SubQuery总结
SubQuery天天用了,理论上总结一下.SubQuery 分三种 1.Noncorrelated 子查询 最普通的样式. 2.Correlated Subqueries 把父查询的列拉到子查询里面去,头一回cyt教我的时候理解了半天. 3.Inline View 也被当成最普通的样式用了. 然后Noncorrelated 子查询又有三种情况 1.返回一行一列 where price < (select max(price) from goods ) 2.返回多行一列 where price>= ALL (select price from goods where type=2) or where NOT price< ANY(select price from goo
更多报表/分析决策功能
3.1 分析功能的基本结构 分析功能() over( partion子句,order by子句,窗口子句) 概念上很难讲清楚,还是用例子说话比较好. 3.2 Row_Number 和 Rank, DENSE_Rank 用于选出Top 3 sales这样的报表 当两个业务员可能有相同业绩时,就要使用Rank和Dense_Rank 比如 金额 RowNum Rank Dense_Rank 张三 4000元 1 1 1 李四 3000元 2 2 2 钱五 2000元 3 3 3 孙六 2000元 4 3 3 丁七 1000元 5
对多级层次查询的start with.....connect by
比如人员组织,产品类别,Oracle提供了很经典的方法 SELECT LEVEL, name, emp_id,manager_emp_id FROM employee START WITH manager_emp_id is null CONNECT BY PRIOR emp_id = manager_emp_id;上面的语句demo了全部的应用,start with指明从哪里开始遍历树,如果从根开始,那么它的manager应该是Null,如果从某个职员开始,可以写成emp_id='11'CONNECT BY 就是指明父子关系,注意PRIOR位置另外还有一个LEVEL列,显示节点的层次[@more@]
3.如果使用Cube(area,month)而不是RollUp
3.如果使用Cube(area,month)而不是RollUp(area,month),除了获得每个地区的合计之外,还将获得每个月份的合计,在报表最后显示。 4.Grouping让合计列更好读 RollUp在显示广州合计时,月份列为NULL,但更好的做法应该是显示为"所有月份" Grouping就是用来判断当前Column是否是一个合计列,1为yes,然后用Decode把它转为"所有月份" Select Decode(Grouping(area),1,'所有地区',area) area, Decode(Grouping(month),1,'所有月份',month), sum(money) From SaleOrder Group by RollUp(area,mont