posted @ 2009-09-16 17:07 勇仔 阅读(24) 评论(0) 编辑

1、sys.all_objects(系统视图)数据库中所有的对象,包含了创建时间和最近修改时间。


--查找存储过程
--所有的存储过程
select * from sys.all_objects where type='P' order by modify_date desc
--2009年3月5号后新建的存储过程
select * from sys.all_objects where type='P' and create_date>'2009-3-5' order by name
--3月5号前建的3月5号后修改过的
select * from sys.all_objects where type='P' and modify_date>'2009-3-5' and create_date<'2009-3-5' order by name

2、sys.objects、sysobjects、syscolumns、systypes....

不想写了保存一个SQL吧。查找数据库信息的sql查出所有用户表的所有字段。


select
obj.name as tableName
 ,obj.type as objType
 ,ISNULL(tableRemark.value,N'') as tableRemark
 ,c.name as FieldName
 ,isnull(PFD.[value],'') as FieldRemark
 ,t.name as DateType
 ,c.prec as FieldLength
-- ,p.value as 字段说明
 ,ISNULL(m.text,N'') as DefaultValue
 ,C.isnullable
 ,ISNULL(IDX.PrimaryKey,0) as PrimaryKey
--标识的详细
--http://www.cnblogs.com/hzq3554055/archive/2008/03/08/1096820.html
 ,case when COLUMNPROPERTY(c.id,c.name,'IsIdentity')=1 then 1 else 0 end
 as IsIdentity
 ,IndexName=ISNULL(IDX.IndexName,N'')
 ,IndexSort=ISNULL(IDX.Sort,N'')
--DESC or ASC
 from sysobjects obj
 inner join syscolumns c
 on c.id=obj.id and obj.type='U'
 inner join systypes t
 on c.xusertype=t.xusertype
 left outer join syscomments m
 on c.cdefault=m.id
--表说明(默认MS_Description)
 left outer join sys.extended_properties tableRemark
 on tableRemark.class=1 and obj.id=tableRemark.major_id
 and tableRemark.minor_id=0 and tableRemark.name='MS_Description'
--取字段说明(默认MS_Description)
 LEFT outer JOIN sys.extended_properties PFD
 ON PFD.class=1
 AND c.[id]=PFD.major_id
 AND c.colid=PFD.minor_id
 and PFD.name='MS_Description'
 left outer join
 (
 select
 IDXC.[object_id],
 IDXC.column_id,
 Sort=CASE INDEXKEY_PROPERTY(IDXC.[object_id],IDXC.index_id,IDXC.index_column_id,'IsDescending')
 WHEN 1 THEN 'DESC' WHEN 0 THEN 'ASC' ELSE '' END,
 PrimaryKey=CASE WHEN IDX.is_primary_key=1 THEN 1 ELSE 0 END,
 IndexName=IDX.Name
 from sys.indexes IDX
 INNER JOIN sys.index_columns IDXC
 ON IDX.[object_id]=IDXC.[object_id] AND IDX.index_id=IDXC.index_id
 LEFT outer JOIN sys.key_constraints KC
 ON IDX.[object_id]=KC.[parent_object_id] AND IDX.index_id=KC.unique_index_id
 INNER JOIN -- 对于一个列包含多个索引的情况,只显示第1个索引信息
 (
 SELECT [object_id], Column_id, index_id=MIN(index_id)
 FROM sys.index_columns
 GROUP BY [object_id], Column_id
 ) IDXCUQ
 ON IDXC.[object_id]=IDXCUQ.[object_id]
 AND IDXC.Column_id=IDXCUQ.Column_id
 AND IDXC.index_id=IDXCUQ.index_id
 ) IDX
 ON C.[id]=IDX.[object_id]
 AND C.colid=IDX.column_id
 order by obj.name

 

 

posted @ 2009-05-15 23:21 勇仔 阅读(140) 评论(0) 编辑
--下面是三种分页方法性能测试。
--与网上所说的测试结果不一致
--(网上有人认为颠倒顺序top法 性能要比Row_number函数编号分页法要快10倍。。。)
--测试的表只有3000多行数据这可能是个问题

set statistics profile on
set statistics io on
set statistics time on
go

--第一名
--Row_number函数编号分页法(SQLServer新提供的函数)
--按SQLServer每一步的执行过程来看:
--用Row_number分页的执行过程步骤要比用top分页的执行步骤要多
--但用Row_number分页第三步(前两步是一样的是结果集的查询)
----也就是分页开始后的开销基本上等于0。
----可能是row_Number函数在查询的结果集上建了一个索引。
--而用top如果排序不是按索引来排的话每次排序都会花费不少时间
select * from (
select
--top 3020 --加不加top执行过程是一样的。。。
ROW_NUMBER()over(order by ProductCode DESC ) as rowNum,*
from Clothes where Sex='男')
results
--where rowNum between 3001 and 3020
--改成下面的写法要快一些。上面的写法在实际执行的时候是与下面写法执行是一样的。
where rowNum >= 3001 and rowNum <= 3020


--第二名
--用颠倒顺序top法
select * from (
select top 20 * from (
select top 3020 *
from Clothes where Sex='男'
order by ProductCode DESC
) pageResult order by ProductCode ASC )
pageSort order by ProductCode DESC



--第三名
--用top加outer join 法执行12步
select toPage.* from
(
select top 3020 *
from Clothes where Sex='男'
order by ProductCode DESC
)
toPage
left outer join
(
select top 3000 * from Clothes where Sex='男'
order by ProductCode DESC
) before
on toPage.clothescode=before.clothescode
where before.clothescode is null


go
set statistics profile off
set statistics io off
set statistics time off

posted @ 2009-03-20 12:15 勇仔 阅读(246) 评论(1) 编辑
顺便看看其它几个排序函数。
不写文字了。直接来代码(加点注释)
--SQLServer2005新分页方法。。。
select * from
(

select
ROW_NUMBER()Over(ORDER BY ClothesCode) as rowNum,
--加行号。不可能有相同的值
--Rank()Over(order by ClothesCode) as RankNum,
--排序值:按指定的排序提供排序值,根据大小,数字可能不连续(可能有相同的值)
Dense_Rank()Over(order by ClothesCode) as DRankNum,
--紧密排序值:按指定的排序提供排序值,是连续的(可能有相同的值)
Ntile(113)Over(order by ClothesCode) as NtileNum ,
--将所有结果尽可能平分为指定的组数得到的结果是组号
*
from Clothes

) a

where rowNum between 11 and 20
posted @ 2009-03-18 10:27 勇仔 阅读(85) 评论(0) 编辑
摘要: 寿星万年历 2008版(V2.0) 本地时间 外地时间 省份 市 站点坐标 暂停 力学时 公元年月 日 一 二 三 四 五 六 年号 年 月 年历1 年历2 许剑伟 2008年7月设计. 阿剑工作室 All Rights Reserved, © 2008 abc阅读全文
posted @ 2008-12-03 19:38 勇仔 阅读(353) 评论(0) 编辑
posted @ 2008-11-21 12:44 勇仔 阅读(154) 评论(6) 编辑
摘要: sp_executesql set @sql = 'select @row_num=count(*) from dbo.[User]' + @sWhereexec sp_executesql @sql,N'@row_num int output', @row_num outputexec sp_executesql (参数1:动态SQL语句),(参数2:参数声明多个参数用逗号分开), 参数值 如下...阅读全文
posted @ 2008-10-28 11:36 勇仔 阅读(72) 评论(0) 编辑
摘要: 接下来应该多了解一些实用的工具。比如代码生成类的、js调试类的、打包工具2008.11.25js调试目前用DebugBar,感觉还行~阅读全文
posted @ 2008-08-17 11:09 勇仔 阅读(26) 评论(0) 编辑
摘要: 全面的http://www.wujianrong.com/docs/regular_expression.htmhttp://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htmhttp://blog.csdn.net/colin310/archive/2005/02/18/292830.aspx阅读全文
posted @ 2008-07-07 14:52 勇仔 阅读(45) 评论(0) 编辑
摘要: Aspx文件:<scripttype="text/javascript">functioncallToServer(){varparam=document.getElementById("txtMessage").value+"&pa"+document.getElementById("a").value;varcontext="";document.getElementByI...阅读全文
posted @ 2007-07-18 16:54 勇仔 阅读(55) 评论(0) 编辑