现在的位置: 首页 > 综合 > 正文

项目心得

2012年05月08日 ⁄ 综合 ⁄ 共 11436字 ⁄ 字号 评论关闭
一、sql
1.排除工作日函数
CREATE FUNCTION [dbo].[getWorkDays] 
(
@begin_date datetime,
@end_date datetime
)
RETURNS int
AS
BEGIN
DECLARE @workdays int
DECLARE @begin_day_of_work int
DECLARE @totalDays int

SET @workdays = 0
SET @totalDays = 0
SET @begin_day_of_work = datepart(dw,@begin_date)
IF (@begin_day_of_work>1 and @begin_day_of_work 0
      SET @workdays = @workdays - (@begin_day_of_work-2)  
END	
SET @totalDays = datediff(day,@begin_date,@end_date)+1
SET @workdays = @workdays + floor(@totalDays/7)*5
IF (@totalDays%7-2)>0
    SET @workdays = @workdays+(@totalDays%7-2)
SET @workdays = @workdays-(SELECT count(*) FROM s_workday WHERE sdate>=@begin_date and sdate=@begin_date and sdate5
9.前10条记录
      select top 10 * form table1 where 范围
10.包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
      (select a from tableA ) except (select a from tableB) except (select a from tableC)
11.说明:随机取出10条数据
      select top 10 * from tablename order by newid()
12.列出数据库里所有的表名
      select name from sysobjects where type=U
13.列出表里的所有的字段名
      select name from syscolumns where id=object_id('TableName')
14.说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select中的case。
      select type,sum(case vender when A then pcs else 0 end),
	  sum(case vender when C then pcs else 0 end),
	  sum(case vender when B then pcselse 0 end) 
	  FROM tablename group by type
15.说明:初始化表table1
      TRUNCATE TABLE table1
16.说明:几个高级查询运算词
  A: UNION 运算符
  UNION 运算符通过组合其他两个结果表(例如TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。
	当 ALL 随 UNION 一起使用时(即 UNIONALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
  B: EXCEPT 运算符
  EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2中的行并消除所有重复行而派生出一个结果表。
	当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
  C: INTERSECT 运算符
  INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。
	当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
  注:使用运算词的几个查询结果行必须是一致的。
17.说明:在线视图查询(表名1:a )
      select * from (SELECT a,b,c FROM a) T where t.a > 1;
18.说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
      select * from table1 where time between time1 and time2
      select a,b,c, from table1 where a not between 数值1 and 数值2
19.说明:in 的使用方法
      select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
20.说明:两张关联表,删除主表中已经在副表中没有的信息
      delete from table1 where not exists (
			select * from table2 where table1.field1=table2.field1)
21.说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
  法一:select * into b from a where 11
  法二:select top 0 * into b from a
22.说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
      insert into b(a, b, c) select d,e,f from b;
23.说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
      insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
  例子:..from b in "&Server.MapPath(".")&"\data.mdb" &" where..
24.创建数据库
	  CREATE DATABASE database-name
25.说明:删除数据库
      drop database dbname
26.说明:备份sql server
  --- 创建备份数据的 device
      USE master
      EXEC sp_addumpdevice disk, testBack, c:\mssql7backup\MyNwind_1.dat
  --- 开始 备份
      BACKUP DATABASE pubs TO testBack
27.说明:创建新表
      create table tabname(col1 type1 [not null] [primarykey],col2 type2 [not null],..)	  
	  根据已有的表创建新表:
      A:create table tab_new like tab_old (使用旧表创建新表)
      B:create table tab_new as select col1,col2… from tab_old definition only
28.说明:
  删除新表:drop table tabname
29.说明:
  增加一个列:Alter table tabname add column col type
  注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
30.说明:
  添加主键:Alter table tabname add primary key(col)
  说明:
  删除主键:Alter table tabname drop primary key(col)
31.说明:
  创建索引:create [unique] index idxname on tabname(col….)
  删除索引:drop index idxname
  注:索引是不可更改的,想更改必须删除重新建。
32.说明:
  创建视图:create view viewname as select statement
  删除视图:drop view viewname
33.说明:几个简单的基本的sql语句
  选择:select * from table1 where 范围
  插入:insert into table1(field1,field2) values(value1,value2)
  删除:delete from table1 where 范围
  更新:update table1 set field1=value1 where 范围
  查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
  排序:select * from table1 order by field1,field2 [desc]
  总数:select count * as totalcount from table1
  求和:select sum(field1) as sumvalue from table1
  平均:select avg(field1) as avgvalue from table1
  最大:select max(field1) as maxvalue from table1
  最小:select min(field1) as minvalue from table1
 
注:删除某表中某一字段的默认值(先查询出此字段默认值约束的名字,然后将其删除即可)
    1.查询字段默认值约束的名字(t1为表名,id为字段名)
      select a.name as 用户表,b.name as 字段名,d.name as 字段默认值约束 
      from sysobjects a,syscolumns b,syscomments c,sysobjects d
      where a.id=b.id and b.cdefault=c.id and c.id=d.id 
      and a.name='t1' and b.name='id'
    2.将id字段的默认值约束删除(DF_t1_id为约束名字)
      alter table t1 DROP CONSTRAINT DF_t1_id
 
修改字段默认值
--(1)查看某表的某个字段是否有默认值约束
select a.name as 用户表,b.name as 字段名,d.name as 字段默认值约束
from sysobjects a
inner join syscolumns b on (a.id=b.id)
inner join syscomments c on ( b.cdefault=c.id )
inner join sysobjects d on (c.id=d.id)
where a.name='tb_fqsj'and b.name='排污口号'

--(2)如果有默认值约束,删除对应的默认值约束
declare @tablename varchar(30)
declare @fieldname varchar(50)
declare @sql varchar(300)

set @tablename='tb_fqsj'
set @fieldname='排污口号'
set @sql=''

select @sql=@sql+'
alter table ['+a.name+'] drop constraint ['+d.name+']'  
from sysobjects a  
join syscolumns b on a.id=b.id  
join syscomments c on b.cdefault=c.id  
join sysobjects d on c.id=d.id  
where a.name=@tablename and b.name=@fieldname 

exec(@sql)

--(3)添加默认值约束
ALTER TABLE tb_fqsj  
ADD DEFAULT ('01') FOR 排污口号 WITH VALUES

--创建表及描述信息     
  create   table   表(a1   varchar(10),a2   char(2))  
   
--为表添加描述信息  
  EXECUTE   sp_addextendedproperty   N'MS_Description',   '人员信息表',   N'user',   N'dbo',   N'table',   N'表',   NULL,   NULL  
   
--为字段a1添加描述信息  
  EXECUTE   sp_addextendedproperty   N'MS_Description',   '姓名',   N'user',   N'dbo',   N'table',   N'表',   N'column',   N'a1'  
   
--为字段a2添加描述信息  
  EXECUTE   sp_addextendedproperty   N'MS_Description',   '性别',   N'user',   N'dbo',   N'table',   N'表',   N'column',   N'a2'  
   
--更新表中列a1的描述属性:  
  EXEC   sp_updateextendedproperty   'MS_Description','字段1','user',dbo,'table','表','column',a1  
   
--删除表中列a1的描述属性:  
  EXEC   sp_dropextendedproperty   'MS_Description','user',dbo,'table','表','column',a1  
   
--删除测试  
  drop   table   表

3.批量更新表
   //批量更新表时,update一个表的列时,需要依赖另外的表,这种依赖可以是where条件子句,也可以要update的field的值依赖另外的表
   通常有两种做法
   1.使用存储过程
   2.在程序代码里逐条循环执行
	这里给出一种更高效、简洁的做法,批量更新SQL ,一句SQL就可以替代麻烦的循环过程,有MS SQLServer、Oracle、DB2下的写法
	--关键点:t4和t1是同一个table,primary key肯定也是同一个,
	--并以它进行关联,这样在 select语句里即可引用到要update的表的fields 
	UPDATE Table1 AS t1 
	SET (Field1,Field2) = 
	(SELECT Field21, Field22 
	FROM Table2 t2 
    INNER JOIN Table3 t3 
    ON t3.Field31 = t2.Field23 
    INNER JOIN Table4 t4 
    ON t3.Field32 = t4.Filed41 
    WHERE t2.Field24 >= '' 
    AND t1.fId = t4.fId); 

	----------------------------MS SQLServer --------------------------------------

	UPDATE t1 
	SET Field1 = Field21, Field2 = Field22 
	FROM Table2 t2 
			 INNER JOIN Table3 t3 
				  ON t3.Field31 = t2.Field23 
			 INNER JOIN Table4 t4 
				  ON t3.Field32 = t4.Filed41 
	WHERE ((t2.Field24 >= '') 
					  AND t1.fId = t4.fId); 
	----------------------------Oracle --------------------------------------------

	UPDATE Table1 t1 
	SET (Field1,Field2) = (SELECT Field21, Field22 
						   FROM Table2 t2 
								INNER JOIN Table3 t3 
									 ON t3.Field31 = t2.Field23 
								INNER JOIN Table4 t4 
									 ON t3.Field32 = t4.Filed41 
						   WHERE ((t2.Field24 >= '') 
								AND t1.fId = t4.fId)) 
	WHERE EXISTS (SELECT Field21, Field22 
				  FROM Table2 t2 
					   INNER JOIN Table3 t3 
							ON t3.Field31 = t2.Field23 
					   INNER JOIN Table4 t4 
							ON t3.Field32 = t4.Filed41 
				  WHERE ((t2.Field24 >= '') 
								 AND t1.fId = t4.fId)); 
	---------------------------------DB2 ------------------------------------------

	UPDATE Table1 AS t1 
	SET (Field1,Field2) = (SELECT Field21, Field22 
						   FROM Table2 t2 
								INNER JOIN Table3 t3 
									 ON t3.Field31 = t2.Field23 
								INNER JOIN Table4 t4 
									 ON t3.Field32 = t4.Filed41 
						   WHERE ((t2.Field24 >= '') 
								 AND t1.fId = t4.fId)) 
	WHERE EXISTS (SELECT Field21, Field22 
				  FROM Table2 t2 
					   INNER JOIN Table3 t3 
							ON t3.Field31 = t2.Field23 
					   INNER JOIN Table4 t4 
							ON t3.Field32 = t4.Filed41 
				  WHERE ((t2.Field24 >= '') 
								 AND t1.fId = t4.fId));

-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
 //批量删除表
 T-sql里有一个快速删除表里所有数据的方法: 
 Truncate Table [表名] 

4.常用字符转换函数
	一、字符转换函数
	1、ASCII()
	返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错。
	2、CHAR()
	将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII 码值,CHAR() 返回NULL 。
	3、LOWER()和UPPER()
	LOWER()将字符串全部转为小写;UPPER()将字符串全部转为大写。
	4、STR()
	把数值型数据转换为字符型数据。
	STR ([,length[, ]])
	length 指定返回的字符串的长度,decimal 指定返回的小数位数。如果没有指定长度,缺省的length 值为10, decimal 缺省值为0。
	当length 或者decimal 为负值时,返回NULL;
	当length 小于小数点左边(包括符号位)的位数时,返回length 个*;
	先服从length ,再取decimal ;
	当返回的字符串位数小于length ,左边补足空格。
	
	二、去空格函数
	1、LTRIM() 把字符串头部的空格去掉。
	2、RTRIM() 把字符串尾部的空格去掉。

	三、取子串函数
	1、left() 
	LEFT ()
	返回character_expression 左起 integer_expression 个字符。

	2、RIGHT() 
	RIGHT ()
	返回character_expression 右起 integer_expression 个字符。

	3、SUBSTRING()
	SUBSTRING (, length)
	返回从字符串左边第starting_ position 个字符起length个字符的部分。

	已知: 字段A='F:\photo\Winter Leaves.jpg'   
	要求:分段截取每段字符[字段A不能为TEXT类型,否则报错]
	解决方法:
	---截取字符串A的第一个\左边的字符串
	select left(A,charindex('/',A)-1)
	输出结果:F:

	---截取\中间的字符串
	select   left(stuff(A,1,charindex('/',A),''),charindex('/',stuff(A,1,charindex('/',A),''))-1)
	输出结果:photo

	---截取最后一个\后面的字符串
	select   reverse(left(reverse(A),charindex('/',reverse(A))-1))
	输出结果:Winter Leaves.jpg

	---截取字符串A的首字幕
	select   STUFF(A,1, 1, '')
	输出结果::\photo\Winter Leaves.jpg

	四、字符串比较函数
	1、CHARINDEX()
	返回字符串中某个指定的子串出现的开始位置。
	CHARINDEX (, )
	其中substring _expression 是所要查找的字符表达式,expression 可为字符串也可为列名表达式。如果没有发现子串,则返回0 值。
	此函数不能用于TEXT 和IMAGE 数据类型。
	2、PATINDEX()
	返回字符串中某个指定的子串出现的开始位置。
	PATINDEX (, )其中子串表达式前后必须有百分号“%”否则返回值为0。
	与CHARINDEX 函数不同的是,PATINDEX函数的子串中可以使用通配符,且此函数可用于CHAR、 VARCHAR 和TEXT 数据类型。

	五、字符串操作函数
	1、QUOTENAME()
	返回被特定字符括起来的字符串。
	QUOTENAME ([, quote_ character]) 其中quote_ character 标明括字符串所用的字符,缺省值为“[]”。
	
	2、REPLICATE()
	返回一个重复character_expression 指定次数的字符串。
	REPLICATE (character_expression integer_expression) 如果integer_expression 值为负值,则返回NULL 。

	3、REVERSE()
	将指定的字符串的字符排列顺序颠倒。
	REVERSE () 其中character_expression 可以是字符串、常数或一个列的值。

	4、REPLACE()
	返回被替换了指定子串的字符串。
	REPLACE () 用string_expression3 替换在string_expression1 中的子串string_expression2。

	4、SPACE()
	返回一个有指定长度的空白字符串。
	SPACE () 如果integer_expression 值为负值,则返回NULL 。

	5、STUFF()
	用另一子串替换字符串指定位置、长度的子串。
	STUFF ()
	如果起始位置为负或长度值为负,或者起始位置大于character_expression1 的长度,则返回NULL 值。
	如果length 长度大于character_expression1 中 start_ position 以右的长度,则character_expression1 只保留首字符。
	
	六、数据类型转换函数
	1、CAST()
	CAST ( AS [ length ])

	2、CONVERT()
	CONVERT ([ length ],  [, style])

	1)data_type为SQL Server系统定义的数据类型,用户自定义的数据类型不能在此使用。
	2)length用于指定数据的长度,缺省值为30。
	3)把CHAR或VARCHAR类型转换为诸如INT或SAMLLINT这样的INTEGER类型、结果必须是带正号或负号的数值。
	4)TEXT类型到CHAR或VARCHAR类型转换最多为8000个字符,即CHAR或VARCHAR数据类型是最大长度。
	5)IMAGE类型存储的数据转换到BINARY或VARBINARY类型,最多为8000个字符。
	6)把整数值转换为MONEY或SMALLMONEY类型,按定义的国家的货币单位来处理,如人民币、美元、英镑等。
	7)BIT类型的转换把非零值转换为1,并仍以BIT类型存储。
	8)试图转换到不同长度的数据类型,会截短转换值并在转换值后显示“+”,以标识发生了这种截断。
	9)用CONVERT()函数的style 选项能以不同的格式显示日期和时间。style 是将DATATIME 和SMALLDATETIME 数据转换为字符串时所选用的由SQL Server 系统提供的转换样式编号,不同的样式编号有不同的输出格式。
	
	七、日期函数
	1、day(date_expression) 
	返回date_expression中的日期值

	2、month(date_expression)
	返回date_expression中的月份值

	3、year(date_expression)
	返回date_expression中的年份值

	4、DATEADD()
	DATEADD ()
	返回指定日期date 加上指定的额外日期间隔number 产生的新日期。
	
	5、DATEDIFF()
	DATEDIFF ()
	返回两个指定日期在datepart 方面的不同之处,即date2 超过date1的差距值,其结果值是一个带有正负号的整数值。

	6、DATENAME()
	DATENAME ()
	以字符串的形式返回日期的指定部分此部分。由datepart 来指定。

	7、DATEPART()
	DATEPART ()
	以整数值的形式返回日期的指定部分。此部分由datepart 来指定。
	DATEPART (dd, date) 等同于DAY (date)
	DATEPART (mm, date) 等同于MONTH (date)
	DATEPART (yy, date) 等同于YEAR (date)

	8、GETDATE()
	以DATETIME 的缺省格式返回系统当前的日期和时间

5.case when...then

6.不同数据库的两张表,将一张表中相应字段的数据对应填充到另一张表

7.往一张空表添加数据
   法一:select * into b from a where 11
  法二:select top 0 * into b from a

二、asp.net
1.asp.net页面传值方式,每种方式的生命周期
ViewState,Cookie,Session,Application,Transfer,Response.Redirect?id=,表单

2.数据源绑定控件,每种控件的使用情况,效率高低
GridView,DataGrid,DataList,Repeater

3.对DataTable重构,排序
        private DataTable SortTable(DataTable dt, string[] pids)
        {
            DataTable dt0 = dt.Clone(); //复制原表结构
            for (int i = 0; i  0)
                    {
                        foreach (DataRow dr in drs)
                        {
                            dt0.ImportRow(dr); //导入行
                        }
                    }
                }
            }
            return dt0;
		}

4.翻页返回,跳到上一级操作的页面;
  
  /*GridView删除一条数据仍跳转到相应页面
  id = 1 可以重新跳到当前页,而且不是每次都跳到首页
  */
  删除

5.iframe框架中的任何一级子页面,点击返回跳转到第一层主页面


6.打印分页,排版
思路,先求条数count,然后求页数page,规定每页条数为pagecount
for(int p = 1;p 
	

2.Repeater中每行select值的绑定【受理审查、暂缓项目处理】,全选
	window.onload =function(){
        var el = document.getElementById("tb").getElementsByTagName("select");    
        var hid = document.getElementById("tb").getElementsByTagName("input");
        var s="",name="",user="";
            
        for(var i=1;i

		var xmlDoc;
        //载入XML文档
        function loadxmlDocument(docName){   
            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");   
            xmlDoc.async = false;   
            xmlDoc.validateOnParse = false;   
            xmlDoc.load(docName);   
            if(xmlDoc.parseError.errorCode != 0){   
                alert(showError(xmlDoc));   
                return(false);   
            }   
            
            return(xmlDoc);   
        } 
      
        //调用数据
        function startload(conid){ 
            var option,id,jobname,fid;
            xmlDoc = loadxmlDocument("Data.xml");
            
            if(xmlDoc == null){ 
                alert('您的浏览器不支持xml文件读取!请使用IE版本'); 
            } 
            else{ 
                clearList(conid);
                var DeptXML = xmlDoc.getElementsByTagName("job");
                
                for (var i = 0 ; i 
 
序号任务名称任务量办理
1合同核定4选择

抱歉!评论已关闭.