摘要: /// <summary> /// 格式化字符串,按指定长度添加换行,如果本身有换行则看每一个换行的长度,如有超出加换行 /// </summary> /// <param name="str"></param> /// <param name="lineMaxCharCount"></param> /// <returns></returns> private string FormatString(String str,int lineMaxCharCou 阅读全文
posted @ 2011-06-02 14:40 KT野人 阅读(422) 评论(0) 推荐(0) 编辑
摘要: 第一种方式:declare lv_deptno emp.deptno%type:=10;lv_ename emp.ENAME%type:='';cursor find_emps_bydeptno(v_deptno number) is select ename from emp where deptno=v_deptno; begin open find_emps_bydeptno(lv_deptno); loop fetch find_emps_bydeptno into lv_ename; exit when find_emps_bydeptno%notfound; dbm 阅读全文
posted @ 2011-05-27 08:36 KT野人 阅读(3432) 评论(0) 推荐(0) 编辑
摘要: 个人感觉这个没什么用,对数据加载后的一些数据筛选最好结合Linq一起使用还有点价值!select ename,sal,ntile(3) over(order by sal desc nulls last) tile from emp上面的意思是把记录分成3份如果是14条则分成554三份!但是最大的问题是where 条件里不能直接筛选某一份的记录! 阅读全文
posted @ 2011-05-26 15:38 KT野人 阅读(3657) 评论(0) 推荐(0) 编辑
摘要: 如果要查询emp表工资最高和最低的员工姓名(排除工资为null)按以前的想法一条简单的语句似乎不好实现最常见的是先升序取最小,再降序取最大有了First/Last排名后就不一样了select min(ename) keep(dense_rank first order by sal desc nulls last) first, min(ename) keep(dense_rank last order by sal desc nulls first) lastfrom emp这里需要注意的是min改成max对查询结果是没有任何影响的,如果要改成sum或avg则必须保证括号里面的列是数值类型 阅读全文
posted @ 2011-05-26 15:06 KT野人 阅读(407) 评论(0) 推荐(0) 编辑
摘要: 直接上代码:select ename, sal, row_number() over(order by sal desc nulls last) row_number, rank() over(order by sal desc nulls last) rank, dense_rank() over(order by sal desc nulls last) dense_rankfrom emp where rownum<=10结果: 总结:①ROW_NUMBER: Row_number函数返回一个唯一的值,当碰到相同数据时,排名按照记录集中记录的顺序依次递增。 ②DENSE_RANK: 阅读全文
posted @ 2011-05-26 14:42 KT野人 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 假如我要查询scott下emp表这样格式的结果包含三列:雇员名 工资 部门平均工资以前的做法也许会这么做:代码SELECT E.ENAME,E.SAL,AV.AVGSALFROM EMP E, (SELECT DEPTNO EMP_DEPT,AVG(SAL) AVGSAL FROM EMP GROUP BY DEPTNO) AVWHERE E.DEPTNO=AV.EMP_DEPT但有了分析函数以后就可以简化一下:代码SELECT ENAME,SAL,AVG(SAL) OVER(PARTITION BY DEPTNO) FROM EMP第一种方式的执行计划是:第二种方式 分析函数的执行计划是: 阅读全文
posted @ 2011-05-26 14:08 KT野人 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 通用分页写法: 1 create PROCEDURE [dbo].[up_Basic_Person_getListByPage] 2 @tablename sysname, 3 @primarykey varchar(20), 4 @pageSize INT=10, 5 @currentPage INT=0, 6 @sqltemplate varchar(4000) ='' 7 AS 8 set @sqltemplate='select top ({pageSize}) * from {tablename} where {primarykey} not in(selec 阅读全文
posted @ 2011-05-04 11:02 KT野人 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 1 --游标使用流程 2 use book 3 go 4 declare @stuName varchar(400) 5 declare @major varchar(400) 6 --声明一个游标并与sql语句关联 7 declare mycursor cursor for 8 select stuName,major from dbo.student 9 --打开游标10 open mycursor 11 --取sql语句结果12 fetch next from mycursor into @stuName,@major13 --@@FETCH_STATUS判断上一句fetch是否成功,. 阅读全文
posted @ 2011-05-04 10:56 KT野人 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 游标删除所有存储过程: 1 create proc DeleteAllProcedures 2 as 3 declare @procName varchar(500) 4 5 declare cur cursor 6 7 for select [name] from sys.objects where type = 'p' 8 9 open cur 10 11 fetch next from cur into @procName12 13 while @@fetch_status = 014 15 begin16 17 if @procName <> 'De 阅读全文
posted @ 2011-05-04 10:52 KT野人 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 代码如下: 1 --检查当前触发器是否已存在 2 IF exists(SELECT * FROM sysobjects WHERE xtype='TR' AND [name]='TR_INSERTUserInfo_LoginLog') 3 --存在即删除该触发器 4 DROP TRIGGER TR_INSERTUserInfo_LoginLog 5 go 6 --触发器创建在UserInfo表上 当对UserInfo表执行INSERT操作后 自动执行触发器中的SQL语句 7 CREATE TRIGGER TR_INSERTUserInfo_LoginLog 8 阅读全文
posted @ 2011-05-04 10:49 KT野人 阅读(387) 评论(0) 推荐(0) 编辑