﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-JAVA</title><link>http://www.blogjava.net/antony1029/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 10 Jun 2026 16:54:14 GMT</lastBuildDate><pubDate>Wed, 10 Jun 2026 16:54:14 GMT</pubDate><ttl>60</ttl><item><title>删除数据库中重复数据的几个方法 </title><link>http://www.blogjava.net/antony1029/archive/2006/05/20/47217.html</link><dc:creator>异度空间</dc:creator><author>异度空间</author><pubDate>Sat, 20 May 2006 12:59:00 GMT</pubDate><guid>http://www.blogjava.net/antony1029/archive/2006/05/20/47217.html</guid><wfw:comment>http://www.blogjava.net/antony1029/comments/47217.html</wfw:comment><comments>http://www.blogjava.net/antony1029/archive/2006/05/20/47217.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/antony1029/comments/commentRss/47217.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/antony1029/services/trackbacks/47217.html</trackback:ping><description><![CDATA[declare @max integer,@id integer
<p>　　declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) &gt; 1</p><p>　　open cur_rows</p><p>　　fetch cur_rows into @id,@max</p><p>　　while @@fetch_status=0</p><p>　　begin</p><p>　　select @max = @max -1</p><p>　　set rowcount @max</p><p>　　delete from 表名 where 主字段 = @id</p><p>　　fetch cur_rows into @id,@max</p><p>　　end</p><p>　　close cur_rows</p><p>　　set rowcount 0</p><p>　　方法二</p><p>　　有两个意义上的重复记录，一是完全重复的记录，也即所有字段均重复的记录，二是部分关键字段重复的记录，比如Name字段重复，而其他字段不一定重复或都重复可以忽略。</p><p>　　1、对于第一种重复，比较容易解决，使用</p><p>　　select distinct * from tableName</p><p>　　就可以得到无重复记录的结果集。</p><p>　　如果该表需要删除重复的记录(重复记录保留1条)，可以按以下方法删除</p><p>　　select distinct * into #Tmp from tableName</p><p>　　drop table tableName</p><p>　　select * into tableName from #Tmp</p><p>　　drop table #Tmp</p><p>　　发生这种重复的原因是表设计不周产生的，增加唯一索引列即可解决。</p><p>　　2、这类重复问题通常要求保留重复记录中的第一条记录，操作方法如下</p><p>　　假设有重复的字段为Name,Address，要求得到这两个字段唯一的结果集</p><p>　　select identity(int,1,1) as autoID, * into #Tmp from tableName</p><p>　　select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID</p><p>　　select * from #Tmp where autoID in(select autoID from #tmp2)</p><p>　　最后一个select即得到了Name，Address不重复的结果集(但多了一个autoID字段，实际写时可以写在select子句中省去此列)</p><p>       如果大家还有好的办法,希望您能将思路或例子与大家分享!!</p><img src ="http://www.blogjava.net/antony1029/aggbug/47217.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/antony1029/" target="_blank">异度空间</a> 2006-05-20 20:59 <a href="http://www.blogjava.net/antony1029/archive/2006/05/20/47217.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Transact_SQL小手册</title><link>http://www.blogjava.net/antony1029/archive/2005/11/07/18666.html</link><dc:creator>异度空间</dc:creator><author>异度空间</author><pubDate>Mon, 07 Nov 2005 14:38:00 GMT</pubDate><guid>http://www.blogjava.net/antony1029/archive/2005/11/07/18666.html</guid><wfw:comment>http://www.blogjava.net/antony1029/comments/18666.html</wfw:comment><comments>http://www.blogjava.net/antony1029/archive/2005/11/07/18666.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/antony1029/comments/commentRss/18666.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/antony1029/services/trackbacks/18666.html</trackback:ping><description><![CDATA[<SPAN id=ArticleContent1_ArticleContent1_lblContent>&nbsp;
<P>*******************Transact_SQL********************</P>
<P>--语 句&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 功 能<BR>--数据操作<BR>SELECT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --从数据库表中检索数据行和列<BR>INSERT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --向数据库表添加新数据行<BR>DELETE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --从数据库表中删除数据行<BR>UPDATE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --更新数据库表中的数据<BR>--数据定义<BR>CREATE TABLE&nbsp;&nbsp;&nbsp; --创建一个数据库表<BR>DROP TABLE&nbsp;&nbsp;&nbsp;&nbsp; --从数据库中删除表<BR>ALTER TABLE&nbsp;&nbsp;&nbsp;&nbsp; --修改数据库表结构<BR>CREATE VIEW&nbsp;&nbsp;&nbsp;&nbsp; --创建一个视图<BR>DROP VIEW&nbsp;&nbsp;&nbsp;&nbsp; --从数据库中删除视图<BR>CREATE INDEX&nbsp;&nbsp;&nbsp; --为数据库表创建一个索引<BR>DROP INDEX&nbsp;&nbsp;&nbsp;&nbsp; --从数据库中删除索引<BR>CREATE PROCEDURE&nbsp;&nbsp; --创建一个存储过程<BR>DROP PROCEDURE&nbsp;&nbsp;&nbsp; --从数据库中删除存储过程<BR>CREATE TRIGGER&nbsp;&nbsp;&nbsp; --创建一个触发器<BR>DROP TRIGGER&nbsp;&nbsp;&nbsp; --从数据库中删除触发器<BR>CREATE SCHEMA&nbsp;&nbsp;&nbsp; --向数据库添加一个新模式<BR>DROP SCHEMA&nbsp;&nbsp;&nbsp;&nbsp; --从数据库中删除一个模式<BR>CREATE DOMAIN&nbsp;&nbsp;&nbsp; --创建一个数据值域<BR>ALTER DOMAIN&nbsp;&nbsp;&nbsp; --改变域定义<BR>DROP DOMAIN&nbsp;&nbsp;&nbsp;&nbsp; --从数据库中删除一个域<BR>--数据控制<BR>GRANT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --授予用户访问权限<BR>DENY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --拒绝用户访问<BR>REVOKE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --解除用户访问权限<BR>--事务控制<BR>COMMIT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --结束当前事务<BR>ROLLBACK&nbsp;&nbsp;&nbsp;&nbsp; --中止当前事务<BR>SET TRANSACTION&nbsp;&nbsp;&nbsp; --定义当前事务数据访问特征<BR>--程序化SQL<BR>DECLARE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --为查询设定游标<BR>EXPLAN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --为查询描述数据访问计划<BR>OPEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --检索查询结果打开一个游标<BR>FETCH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --检索一行查询结果<BR>CLOSE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --关闭游标<BR>PREPARE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --为动态执行准备SQL 语句<BR>EXECUTE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --动态地执行SQL 语句<BR>DESCRIBE&nbsp;&nbsp;&nbsp;&nbsp; --描述准备好的查询</P>
<P>---局部变量<BR>declare @id char(10)<BR>--set @id = '10010001'<BR>select @id = '10010001'</P>
<P>---全局变量<BR>---必须以@@开头</P>
<P>--IF ELSE<BR>declare @x int @y int @z int<BR>select @x = 1 @y = 2 @z=3<BR>if @x &gt; @y<BR>&nbsp;print 'x &gt; y' --打印字符串'x &gt; y'<BR>else if @y &gt; @z<BR>&nbsp;print 'y &gt; z'<BR>else print 'z &gt; y'</P>
<P>--CASE<BR>use pangu<BR>update employee<BR>set e_wage =<BR>&nbsp;case<BR>&nbsp; when job_level = ’1’ then e_wage*1.08<BR>&nbsp; when job_level = ’2’ then e_wage*1.07<BR>&nbsp; when job_level = ’3’ then e_wage*1.06<BR>&nbsp; else e_wage*1.05<BR>&nbsp;end</P>
<P>--WHILE CONTINUE BREAK<BR>declare @x int @y int @c int<BR>select @x = 1 @y=1<BR>while @x &lt; 3<BR>&nbsp;begin<BR>&nbsp; print @x --打印变量x 的值<BR>&nbsp; while @y &lt; 3<BR>&nbsp;&nbsp; begin<BR>&nbsp;&nbsp;&nbsp; select @c = <A href="mailto:100*@x">100*@x</A> + @y<BR>&nbsp;&nbsp;&nbsp; print @c --打印变量c 的值<BR>&nbsp;&nbsp;&nbsp; select @y = @y + 1<BR>&nbsp;&nbsp; end<BR>&nbsp; select @x = @x + 1<BR>&nbsp; select @y = 1<BR>&nbsp;end</P>
<P>--WAITFOR<BR>--例 等待1 小时2 分零3 秒后才执行SELECT 语句<BR>waitfor delay ’01:02:03’<BR>select * from employee<BR>--例 等到晚上11 点零8 分后才执行SELECT 语句<BR>waitfor time ’23:08:00’<BR>select * from employee</P>
<P>&nbsp;</P>
<P>***SELECT***</P>
<P>&nbsp;&nbsp; select *(列名) from table_name(表名) where column_name operator value<BR>&nbsp;&nbsp; ex:(宿主)<BR>&nbsp; select * from stock_information where stockid&nbsp;&nbsp; = str(nid)<BR>&nbsp;&nbsp;&nbsp;&nbsp; stockname = 'str_name' <BR>&nbsp;&nbsp;&nbsp;&nbsp; stockname like '% find this %' <BR>&nbsp;&nbsp;&nbsp;&nbsp; stockname like '[a-zA-Z]%' --------- ([]指定值的范围)<BR>&nbsp;&nbsp;&nbsp;&nbsp; stockname like '[^F-M]%'&nbsp;&nbsp; --------- (^排除指定范围)<BR>&nbsp;&nbsp;&nbsp;&nbsp; --------- 只能在使用like关键字的where子句中使用通配符)<BR>&nbsp;&nbsp;&nbsp;&nbsp; or stockpath = 'stock_path'<BR>&nbsp;&nbsp;&nbsp;&nbsp; or stocknumber &lt; 1000<BR>&nbsp;&nbsp;&nbsp;&nbsp; and stockindex = 24<BR>&nbsp;&nbsp;&nbsp;&nbsp; not stocksex = 'man'<BR>&nbsp;&nbsp;&nbsp;&nbsp; stocknumber between 20 and 100<BR>&nbsp;&nbsp;&nbsp;&nbsp; stocknumber in(10,20,30)<BR>&nbsp;&nbsp;&nbsp;&nbsp; order by stockid desc(asc) --------- 排序，desc-降序，asc-升序<BR>&nbsp;&nbsp;&nbsp;&nbsp; order by 1,2 --------- by列号<BR>&nbsp;&nbsp;&nbsp;&nbsp; stockname = (select stockname from stock_information&nbsp; where stockid&nbsp; = 4)<BR>&nbsp;&nbsp;&nbsp;&nbsp; --------- 子查询<BR>&nbsp;&nbsp;&nbsp;&nbsp; --------- 除非能确保内层select只返回一个行的值，<BR>&nbsp;&nbsp;&nbsp;&nbsp; --------- 否则应在外层where子句中用一个in限定符<BR>&nbsp; select distinct column_name form table_name --------- distinct指定检索独有的列值，不重复<BR>&nbsp; select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name<BR>&nbsp; select stockname , "stocknumber" = count(*) from table_name group by stockname<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --------- group by 将表按行分组,指定列中有相同的值<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; having count(*) = 2&nbsp; ---------&nbsp; having选定指定的组<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp; select * <BR>&nbsp; from table1, table2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp; where table1.id *= table2.id -------- 左外部连接，table1中有的而table2中没有得以null表示<BR>&nbsp;&nbsp;&nbsp;&nbsp; table1.id =* table2.id -------- 右外部连接 </P>
<P>&nbsp; select stockname from table1<BR>&nbsp; union [all]&nbsp; -----&nbsp; union合并查询结果集，all-保留重复行<BR>&nbsp; select stockname from table2</P>
<P>***insert***</P>
<P>&nbsp; insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value (select Stockname , Stocknumber from Stock_table2)---value为select语句</P>
<P>***update***</P>
<P>&nbsp; update table_name set Stockname = "xxx" [where Stockid = 3]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stockname = default<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stockname = null<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stocknumber = Stockname + 4</P>
<P>***delete***</P>
<P>&nbsp; delete from table_name where Stockid = 3<BR>&nbsp; truncate table_name ----------- 删除表中所有行，仍保持表的完整性<BR>&nbsp; drop table table_name --------------- 完全删除表</P>
<P>***alter table*** --- 修改数据库表结构</P>
<P>&nbsp; alter table database.owner.table_name add column_name char(2) null .....<BR>&nbsp; sp_help table_name ---- 显示表已有特征<BR>&nbsp; create table table_name (name char(20), age smallint, lname varchar(30))<BR>&nbsp; insert into table_name select ......... ----- 实现删除列的方法（创建新表）<BR>&nbsp; alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束<BR>&nbsp;&nbsp;&nbsp; <BR>***function(/*常用函数*/)***</P>
<P>----统计函数----<BR>AVG&nbsp;&nbsp;&nbsp; --求平均值<BR>COUNT&nbsp;&nbsp; --统计数目<BR>MAX&nbsp;&nbsp;&nbsp; --求最大值<BR>MIN&nbsp;&nbsp;&nbsp; --求最小值<BR>SUM&nbsp;&nbsp;&nbsp; --求和</P>
<P>--AVG<BR>use pangu<BR>select avg(e_wage) as dept_avgWage<BR>from employee<BR>group by dept_id</P>
<P>--MAX<BR>--求工资最高的员工姓名<BR>use pangu<BR>select e_name<BR>from employee<BR>where e_wage =<BR>&nbsp;(select max(e_wage)<BR>&nbsp; from employee)</P>
<P>--STDEV()<BR>--STDEV()函数返回表达式中所有数据的标准差</P>
<P>--STDEVP()<BR>--STDEVP()函数返回总体标准差</P>
<P>--VAR()<BR>--VAR()函数返回表达式中所有值的统计变异数</P>
<P>--VARP()<BR>--VARP()函数返回总体变异数</P>
<P>----算术函数----</P>
<P>/***三角函数***/<BR>SIN(float_expression) --返回以弧度表示的角的正弦<BR>COS(float_expression) --返回以弧度表示的角的余弦<BR>TAN(float_expression) --返回以弧度表示的角的正切<BR>COT(float_expression) --返回以弧度表示的角的余切<BR>/***反三角函数***/<BR>ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角<BR>ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角<BR>ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角<BR>ATAN2(float_expression1,float_expression2) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --返回正切是float_expression1 /float_expres-sion2的以弧度表示的角<BR>DEGREES(numeric_expression)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --把弧度转换为角度返回与表达式相同的数据类型可为<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --INTEGER/MONEY/REAL/FLOAT 类型<BR>RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --INTEGER/MONEY/REAL/FLOAT 类型<BR>EXP(float_expression)&nbsp; --返回表达式的指数值<BR>LOG(float_expression)&nbsp; --返回表达式的自然对数值<BR>LOG10(float_expression)--返回表达式的以10 为底的对数值<BR>SQRT(float_expression) --返回表达式的平方根<BR>/***取近似值函数***/<BR>CEILING(numeric_expression)&nbsp; --返回&gt;=表达式的最小整数返回的数据类型与表达式相同可为<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --INTEGER/MONEY/REAL/FLOAT 类型<BR>FLOOR(numeric_expression)&nbsp;&nbsp;&nbsp; --返回&lt;=表达式的最小整数返回的数据类型与表达式相同可为<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --INTEGER/MONEY/REAL/FLOAT 类型<BR>ROUND(numeric_expression)&nbsp;&nbsp;&nbsp; --返回以integer_expression 为精度的四舍五入值返回的数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型<BR>ABS(numeric_expression)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --返回表达式的绝对值返回的数据类型与表达式相同可为<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --INTEGER/MONEY/REAL/FLOAT 类型<BR>SIGN(numeric_expression)&nbsp;&nbsp;&nbsp;&nbsp; --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型<BR>PI()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --返回值为π 即3.1415926535897936<BR>RAND([integer_expression])&nbsp;&nbsp; --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数</P>
<P><BR>----字符串函数----<BR>ASCII()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --函数返回字符表达式最左端字符的ASCII 码值<BR>CHAR()&nbsp;&nbsp; --函数用于将ASCII 码转换为字符<BR>&nbsp;&nbsp;&nbsp; --如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值<BR>LOWER()&nbsp;&nbsp; --函数把字符串全部转换为小写<BR>UPPER()&nbsp;&nbsp; --函数把字符串全部转换为大写<BR>STR()&nbsp;&nbsp; --函数把数值型数据转换为字符型数据<BR>LTRIM()&nbsp;&nbsp; --函数把字符串头部的空格去掉<BR>RTRIM()&nbsp;&nbsp; --函数把字符串尾部的空格去掉<BR>LEFT(),RIGHT(),SUBSTRING()&nbsp; --函数返回部分字符串<BR>CHARINDEX(),PATINDEX()&nbsp; --函数返回字符串中某个指定的子串出现的开始位置<BR>SOUNDEX()&nbsp; --函数返回一个四位字符码 <BR>&nbsp;&nbsp;&nbsp; --SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值&nbsp;&nbsp;&nbsp;&nbsp; <BR>DIFFERENCE()&nbsp;&nbsp;&nbsp; --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异<BR>&nbsp;&nbsp;&nbsp; --0 两个SOUNDEX 函数返回值的第一个字符不同<BR>&nbsp;&nbsp;&nbsp; --1 两个SOUNDEX 函数返回值的第一个字符相同<BR>&nbsp;&nbsp;&nbsp; --2 两个SOUNDEX 函数返回值的第一二个字符相同<BR>&nbsp;&nbsp;&nbsp; --3 两个SOUNDEX 函数返回值的第一二三个字符相同<BR>&nbsp;&nbsp;&nbsp; --4 两个SOUNDEX 函数返回值完全相同<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P>QUOTENAME()&nbsp; --函数返回被特定字符括起来的字符串<BR>/*select quotename('abc', '{') quotename('abc')<BR>运行结果如下<BR>----------------------------------{<BR>{abc} [abc]*/</P>
<P>REPLICATE()&nbsp;&nbsp;&nbsp;&nbsp; --函数返回一个重复character_expression 指定次数的字符串<BR>/*select replicate('abc', 3) replicate( 'abc', -2)<BR>运行结果如下<BR>----------- -----------<BR>abcabcabc NULL*/</P>
<P>REVERSE()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --函数将指定的字符串的字符排列顺序颠倒<BR>REPLACE()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --函数返回被替换了指定子串的字符串<BR>/*select replace('abc123g', '123', 'def')<BR>运行结果如下<BR>----------- -----------<BR>abcdefg*/</P>
<P>SPACE()&nbsp;&nbsp; --函数返回一个有指定长度的空白字符串<BR>STUFF()&nbsp;&nbsp; --函数用另一子串替换字符串指定位置长度的子串</P>
<P><BR>----数据类型转换函数----<BR>CAST() 函数语法如下<BR>CAST() (&lt;expression&gt; AS &lt;data_ type&gt;[ length ])<BR>CONVERT() 函数语法如下<BR>CONVERT() (&lt;data_ type&gt;[ length ], &lt;expression&gt; [, style])</P>
<P>select cast(100+99 as char) convert(varchar(12), getdate())<BR>运行结果如下<BR>------------------------------ ------------<BR>199&nbsp;&nbsp; Jan 15 2000</P>
<P>----日期函数----<BR>DAY()&nbsp;&nbsp; --函数返回date_expression 中的日期值<BR>MONTH()&nbsp;&nbsp; --函数返回date_expression 中的月份值<BR>YEAR()&nbsp;&nbsp; --函数返回date_expression 中的年份值<BR>DATEADD(&lt;datepart&gt; ,&lt;number&gt; ,&lt;date&gt;) <BR>&nbsp;&nbsp;&nbsp; --函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期<BR>DATEDIFF(&lt;datepart&gt; ,&lt;number&gt; ,&lt;date&gt;)<BR>&nbsp;&nbsp;&nbsp; --函数返回两个指定日期在datepart 方面的不同之处<BR>DATENAME(&lt;datepart&gt; , &lt;date&gt;)&nbsp; --函数以字符串的形式返回日期的指定部分<BR>DATEPART(&lt;datepart&gt; , &lt;date&gt;)&nbsp; --函数以整数值的形式返回日期的指定部分<BR>GETDATE()&nbsp; --函数以DATETIME 的缺省格式返回系统当前的日期和时间</P>
<P>----系统函数----<BR>APP_NAME()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --函数返回当前执行的应用程序的名称<BR>COALESCE()&nbsp; --函数返回众多表达式中第一个非NULL 表达式的值<BR>COL_LENGTH(&lt;'table_name'&gt;, &lt;'column_name'&gt;) --函数返回表中指定字段的长度值<BR>COL_NAME(&lt;table_id&gt;, &lt;column_id&gt;)&nbsp;&nbsp; --函数返回表中指定字段的名称即列名<BR>DATALENGTH() --函数返回数据表达式的数据的实际长度<BR>DB_ID(['database_name']) --函数返回数据库的编号<BR>DB_NAME(database_id)&nbsp; --函数返回数据库的名称<BR>HOST_ID()&nbsp;&nbsp;&nbsp;&nbsp; --函数返回服务器端计算机的名称<BR>HOST_NAME()&nbsp;&nbsp;&nbsp;&nbsp; --函数返回服务器端计算机的名称<BR>IDENTITY(&lt;data_type&gt;[, seed increment]) [AS column_name])<BR>&nbsp;--IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中<BR>/*select identity(int, 1, 1) as column_name<BR>&nbsp;into newtable<BR>&nbsp;from oldtable*/<BR>ISDATE()&nbsp; --函数判断所给定的表达式是否为合理日期<BR>ISNULL(&lt;check_expression&gt;, &lt;replacement_value&gt;) --函数将表达式中的NULL 值用指定值替换<BR>ISNUMERIC()&nbsp; --函数判断所给定的表达式是否为合理的数值<BR>NEWID()&nbsp;&nbsp; --函数返回一个UNIQUEIDENTIFIER 类型的数值<BR>NULLIF(&lt;expression1&gt;, &lt;expression2&gt;)<BR>&nbsp;--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值</P></SPAN><img src ="http://www.blogjava.net/antony1029/aggbug/18666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/antony1029/" target="_blank">异度空间</a> 2005-11-07 22:38 <a href="http://www.blogjava.net/antony1029/archive/2005/11/07/18666.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 选择UML工具</title><link>http://www.blogjava.net/antony1029/archive/2005/11/07/18663.html</link><dc:creator>异度空间</dc:creator><author>异度空间</author><pubDate>Mon, 07 Nov 2005 14:25:00 GMT</pubDate><guid>http://www.blogjava.net/antony1029/archive/2005/11/07/18663.html</guid><wfw:comment>http://www.blogjava.net/antony1029/comments/18663.html</wfw:comment><comments>http://www.blogjava.net/antony1029/archive/2005/11/07/18663.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/antony1029/comments/commentRss/18663.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/antony1029/services/trackbacks/18663.html</trackback:ping><description><![CDATA[<DIV align=left><SPAN class=hai>选择UML工具<BR>以下标准用于评估一种UML工具。当然，除了已被列出的以外，可以用这些标准来评估的产品还很多，但如果你想选择最好的，请花时间按照清单对产品作测试。如果你特别重视某项标准而在清单中没有列出， 请告诉我们。<BR><BR>信息仓储支持 <BR><BR>对于一个大项目，信息仓储(Repository)对在开发人员之间共享组件设计是必要的。两个以上的开发人员可以共享同一模型的的组件，甚至可以通过在适当级别上定义所有权和共享权来合作进行单一组件的开发。 <BR><BR>信息仓储通常用提供数据共享和并发控制等特性的数据库来实现。 通过提供锁定和只读访问，信息仓储允许一个开发人员拥有整个模型而其他人对该模型及其组件只读访问，或者将这些组件结合到自己的设计中。重要的是： 这种工具应该允许你从另一个模型只引入你所需要的组件而不必引入整个模型。<BR><BR>构造信息仓储的另一个令人感兴趣的方法是利用项目的源代码，使用源码控制系统来提供并发控制。这种方法的好处是在源码和模型之间有更高级别的同步，另一个好处是更除去了另一个数据源--别忘了，如果你为信息仓储使用了数据库，你必须对各种存储数据分别备份并完成在模型、信息仓储和源代码之间的三方同步，而不止是在代码和模型之间的两方同步。<BR><BR>有了建模工具对信息仓储的支持，对任何组件的修改将被自动传播到所有引入该组件的设计。<BR><BR>双向工程 <BR><BR>对源代码(Java, C++, CORBA IDL)的正向和逆向工程的能力是一项复杂的需求，不同厂商在不同程度上成功地支持这一点。对正向和逆向工程这两方面的成功结合，定义为双向工程。<BR><BR>正向工程在第一次从模型产生代码时非常有用，这将为你节省许多用于编写类、属性、方法代码的琐碎工作的时间。<BR><BR>在以前没有模型存在的情况下，将代码转换成模型；或者在迭代结束，重新同步模型和代码时，逆向工程非常有用。<BR><BR>在一个迭代开发周期中，一旦一个模型作为迭代的一部分被修改，另一轮的正向工程应允许所有加入该模型的新的类、方法、属性的代码被更新。这个步骤通常不被开发者采用，因为许多工具在这个过程中没有办法管理源代码，问题在于源代码中不只包含与模型有关的信息。工具必须精于对在新一轮正向工程之前已有的源代码进行重新构造。<BR><BR>至少，建模工具应成功支持一开始的正向工程和全过程的逆向工程。同样，建模工具对纯Java语言的逆向工程的支持应该毫无问题。一定要针对你自己的源代码确认这一点，因为我们见到过优秀的工具在对Java的一些特性如内联类(inner classes)等进行逆向工程时失败了，每一次进行逆向工程时，你不得不把讨厌的代码注释掉----确实非常痛苦。<BR><BR>HTML文档化 <BR><BR>对象建模工具应能为对象模型及其组件无缝地产生HTML文档。HTML文档提供对象模型的静态视图，以便开发者通过浏览器迅速查询而不需要加载建模工具本身。另外，通过产生HTML文档，所需建模工具的许可证(licenses)会因减去那些对模型只需要有只读权限的人而减少。<BR><BR>HTML文档应包括模型中每个图形的一张位图，并允许通过超链接浏览整个模型。产生HTML文档所需的时间应是合理的。现在许多产品在不同程度上成功支持这一点。再说一遍，你必须亲自测试这个特性，在特征表上有打勾并不能保证成功支持。<BR><BR>完全UML1.3支持 <BR><BR>虽然许多工具声称完全支持UML1.3，实际上，这是一项复杂的需求，一些工具并不能做到广告所声称的完全支持。至少应支持的图表有：用例图(Use Case diagrams)，类图(Class diagrams)，协作图(Collaboration diagrams)，顺序图(Sequence diagrams)，包图(Package diagrams)，状态图(State diagrams)。<BR><BR>类和方法的选择列表 <BR><BR>建模工具应在一些关键界面上提供选择列表:<BR><BR>协作图(Collaboration Diagrams)和顺序图(Sequence Diagrams) --工具应允许从模型的类列表中选择一个类，把一个对象分配给它，并允许对象间传送的消息能够从接收消息对象(类)的有效方法列表中选取。<BR><BR>类图(Class Diagram) --工具应允许从别的包或模型的类列表中选择并引入类 。<BR><BR>选择列表特性在直观上对建模工具至关重要，可以看作是必备特性。能够迅速从列表中选择一个对象到另一个对象的消息，给开发顺序图和协作图带来很大的方便。<BR><BR>数据建模集成 <BR><BR>对象建模工具应允许集成数据建模工具。有许多方法可以提供这种功能。一种方法是UML工具提供将对象模型转换成DDL(数据定义语言，用于为类创建表的SQL)。另一种方法是UML工具输出元数据到能够输入这些元数据的数据建模工具，并将其作为数据模型的基础。一套先进、完整的工具应允许数据模型和对象模型之间在每次设计的迭代之后同步。<BR><BR>版本控制 <BR><BR>建模工具应允许储存各种版本，以便后续迭代开始时，以前的版本仍然可以得到，并用于重建或保持基于该版本的已有代码。<BR><BR>模型导航 <BR><BR>建模工具应提供强的导航支持以允许开发者全盘浏览模型中的所有图表和类。一种方法是提供一个按名字排序的类目录或选择列表，以便设计人员随意跳到图表中想去的类。<BR><BR>对于大的图表，工具应使得在缩放和平移时，能够轻松实现浏览。<BR><BR>工具也应允许在使用双向工程时，对类的源代码轻松浏览。<BR><BR>打印支持 <BR><BR>建模工具应允许一张大图表能够准确地用多个页面打印出来，并提供打印预览和缩放功能，轻松地使图表能够在所需页数内放置。允许将一张图表放置在单页中的能力在清单中是高要求。不幸的是，我们发现许多工具很难用无缝的方式完成这项重要的任务。<BR><BR>图表视图 <BR><BR>建模工具应能方便定制类及其细节的视图。例如，它应有可能从图表中排除所有的get/set方法，因为它们会对阐明一个图表造成混乱。方法的全部信息应允许容易地根据不同级别细节的需要显示或隐藏。属性和方法的可见性(private, protected, public)是用于选择什么该显示，什么该隐藏的另一个尺度。<BR><BR>输出图表 <BR><BR>一个经常被忽略的关键特性是用某种格式输出图表，以便引入到文字处理文档或Web页面中。用于输出的最流行图像格式是GIF、PNG和JPEG。输出时，工具应允许你定义所产生图形的首选分辨率和尺寸。这个功能需求来自那些野心勃勃，需要写一本包括图表的UML书籍的作者，或者希望将他们的工作展示在网站上的人。<BR><BR>脚本 <BR><BR>用脚本编程是建模工具应该支持的另一个强大的特性。有了脚本功能，高级用户可以创建能在建模工具内直接访问对象模型的脚本来添加其它功能，例如：为当前开发的项目做的项目管理表格，定制文档，定制代码，报表和度量。一个定制代码的例子是集合类和用于访问集合类的get/set方法。<BR><BR>为了方便使用脚本，建模工具应公开访问自身对象模型的接口，以便在开发时能提供对对象模型组件的访问。(如果这一句听起来有点绕口，请再读一遍。)例如，脚本编写者应能在整个迭代周期中访问类图中类的集合，从而能够通过类对象的accessor方法来访问类的属性。当然，脚本语言自身应该是面向对象的；一个明显的选择就是Java语言本身，另一种选择就是Python脚本语言。 <BR><BR>健壮性(Robustness) <BR><BR>你的UML工具需要象岩石般坚固可靠，以防止设计期间工具崩溃而使用户的时间和生产率在不知不觉中损失，或者在模型没有备份的情况下崩溃。我们曾亲眼见过许多领先的工具因为崩溃或文件损坏而引起数小时的工作成果丢失。如果你是一位开发人员，你知道那种因“生产率高的软件”反而比粗糙的代码工具生产率要低而产生的蔑视感觉。如果你是一位经理，你会看到被要求使用一种不可靠的工具时开发人员的愤恨。<BR><BR>今天，健壮性常被发现于用Java实现的应用程序(JVM运行时保护)或开放源码的项目(在web范围内并行调试)。发现某种特定的UML工具是否健壮的最快方法是在comp.object等新闻组四处询问，你一定会听到许多抱怨的！<BR><BR>可用于此处的另一个策略可以借鉴有效率的办公应用程序，我们也推荐工具开发商采用这种策略。该策略就是让UML工具每隔一定时间间隔就在背后自动保存模型。<BR><BR>平台 <BR><BR>为了使你在建模工具上的投资得到最大回报，请慎重地考虑工具将运行在哪种平台上。你需要为Windows还是Unix开发软件？还是二者都要？将在哪种平台上开发？<BR><BR>最近的各种事件一起推翻了这个神话：一流的跨平台图形用户界面还不能实现或者拥有一个"最少共同支配者"的视感。很长时间以来,这是不可能的(除了基于HTML的应用程序之外)，直到最近Java的Swing用户界面的出现。但是，跨平台工具需要在Linux等常用平台得到支持，以大规模地被程序员们采用。<BR><BR>Sun最初几乎没有做什么事情来促进Java在Linux上的应用。但最近工业界元老们，主要是IBM，IBM保证在他们所有的硬件平台上为Linux提供无限广泛的支持，并支持Apache/Jakarta项目, IBM现正快速地在Linux上推广Java。也许因为IBM已经开始为主要的Linux厂商发放它的JDK 1.1.8版本，Sun被迫支持在Linux上的 <BR>全功能JDK 1.2 （带Swing的Java2）的发放。通过Blackdown小组的努力，这个Linux上的Java端口大部分已被完成。<BR><BR>迄今为止我们已经测试了一种Linux平台上基于Swing的领先Linux工具，结果优秀。但要告诫的是：128M内存是必需的。<BR><BR>版本更新 <BR><BR>你需要选择一种将会不断通过修正错误、改进性能、添加新特性来进行改进的建模工具，毕竟你在时间和金钱上进行了一项大的投资，而且改换到另一种建模工具并不容易。<BR><BR>小心那些已经被大公司拥有的产品。在兑现所有期权之后，最初的开发者常常会离开公司，寻找下一次大的机会。寻找有才能的、能读懂和维护最初并非由其编码的软件复杂模块的程序员并不容易。这种场景也会出现在开放源码项目上。<BR><BR>如何能知道一种产品是否在改进？向销售代表询问下一版本发放的详细时间表以及该产品将来的蓝图。密切观察产品改进和添加新特性的速度。产品计划什么时候支持UML 1.3？图形界面是否支持最新的流行样式？你也可以看看该公司的网站：如果产品发布和外界评论是旧的，就是可疑的。<BR><BR>未来... <BR><BR>现在我们来看看对未来有什么希望。建模工具的当前成熟程度表明，工具厂商准备通过添加高级特性来使产品达到新的高度。我们希望在下一代产品中看到以下特性的出 </SPAN></DIV><img src ="http://www.blogjava.net/antony1029/aggbug/18663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/antony1029/" target="_blank">异度空间</a> 2005-11-07 22:25 <a href="http://www.blogjava.net/antony1029/archive/2005/11/07/18663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA的中文文档了</title><link>http://www.blogjava.net/antony1029/archive/2005/11/07/18661.html</link><dc:creator>异度空间</dc:creator><author>异度空间</author><pubDate>Mon, 07 Nov 2005 14:17:00 GMT</pubDate><guid>http://www.blogjava.net/antony1029/archive/2005/11/07/18661.html</guid><wfw:comment>http://www.blogjava.net/antony1029/comments/18661.html</wfw:comment><comments>http://www.blogjava.net/antony1029/archive/2005/11/07/18661.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/antony1029/comments/commentRss/18661.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/antony1029/services/trackbacks/18661.html</trackback:ping><description><![CDATA[<A href="http://gceclub.sun.com.cn/"><FONT color=#000000><BR>这是网站：</FONT>http://gceclub.sun.com.cn/</A><img src ="http://www.blogjava.net/antony1029/aggbug/18661.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/antony1029/" target="_blank">异度空间</a> 2005-11-07 22:17 <a href="http://www.blogjava.net/antony1029/archive/2005/11/07/18661.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>