﻿<?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-低调做人，高调做事！</title><link>http://www.blogjava.net/fuxueliang8806/</link><description>做人低调!</description><language>zh-cn</language><lastBuildDate>Tue, 05 May 2026 22:02:30 GMT</lastBuildDate><pubDate>Tue, 05 May 2026 22:02:30 GMT</pubDate><ttl>60</ttl><item><title>常用存储过程语法</title><link>http://www.blogjava.net/fuxueliang8806/archive/2009/04/29/268074.html</link><dc:creator>付学亮</dc:creator><author>付学亮</author><pubDate>Wed, 29 Apr 2009 03:42:00 GMT</pubDate><guid>http://www.blogjava.net/fuxueliang8806/archive/2009/04/29/268074.html</guid><wfw:comment>http://www.blogjava.net/fuxueliang8806/comments/268074.html</wfw:comment><comments>http://www.blogjava.net/fuxueliang8806/archive/2009/04/29/268074.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fuxueliang8806/comments/commentRss/268074.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fuxueliang8806/services/trackbacks/268074.html</trackback:ping><description><![CDATA[新一篇: 利用WatiN自动化网站功能测试 | 旧一篇: 代码自动生成工具MyGeneration之三 <br />
前面学过了基本的存储过程,见 <br />
<br />
存储过程入门 <br />
<br />
现在学一下常用的存储过程的语法，只要花一点点时间学习下，就能用存储过程实现很复杂的功能，可以少写很多代码。 <br />
<br />
为了方便说明，数据库使用SQL Server的示例数据库，Northwind和pubs，如果SQL Server中没有的话，可以按下面的方法安装 <br />
<br />
1，下载SQL2000SampleDb.msi,下载地址是： <br />
http://www.microsoft.com/downloads/details.aspx?FamilyId=06616212-0356-46A0-8DA2-EEBC53A68034&amp;displaylang=en <br />
2，安装后，到默认目录C:\SQL Server 2000 Sample Databases 有instnwnd.sql ，instpubs.sql两个文件 <br />
3，在sql server中运行这两个sql 就可以创建你Northwind和pubs数据库。 <br />
<br />
下面开始学T-SQL的语法 <br />
<br />
<br />
一.注释 <br />
<br />
<br />
-- 单行注释，从这到本行结束为注释,类似C++,c#中// <br />
/* &#8230; */ 多行注释，类似C++，C#中/* &#8230; */ <br />
<br />
<br />
二.变量（int, smallint, tinyint, decimal,float,real, money ,smallmoney, text ,image, char, varchar。。。。。。） <br />
语法： <br />
DECLARE <br />
{ <br />
{@local_variable data_type} <br />
} [,...n] <br />
例如： <br />
<br />
<br />
declare @ID int --申明一个名为@ID的变量，类型为int型 <br />
<br />
三.在SQL Server窗口中打印出变量的值 <br />
<br />
<br />
语法： <br />
PRINT 'any ASCII text' | @local_variable | @@FUNCTION | string_expr <br />
<br />
<br />
四.变量赋值 <br />
<br />
<br />
例如： <br />
<br />
--从数据表中取出第一行数据的ID,赋值给变量@id，然后打印出来 <br />
Declare @ID int <br />
Set @ID = (select top(1) categoryID from categories) <br />
Print @ID <br />
<br />
在SQL中，我们不能像代码那样直接给变量赋值，例如@id = 1，如果要达到这样的功能，可以这样写： <br />
<br />
Declare @ID int <br />
Set @ID = (select 1) -- 类似 @ID=1 <br />
Select @id=1 -- 类似 @ID=1 <br />
Print @ID <br />
<br />
<br />
五.变量运算(+,-,*,/,&#8230;&#8230;) <br />
<br />
<br />
以下必要时候省略变量申明 <br />
Set @ID = (select 1+5) --类似 @ID=1+5 <br />
Set @ID=(select 1-@ID) --类似 @ID=1-@ID <br />
<br />
六.比较操作符 <br />
&#8226; &gt; (greater than). <br />
&#8226; &lt; (less than). <br />
&#8226; = (equals). <br />
&#8226; &lt;= (less than or equal to). <br />
&#8226; &gt;= (greater than or equal to). <br />
&#8226; != (not equal to). <br />
&#8226; &lt;&gt; (not equal to). <br />
&#8226; ! &lt; (not less than). <br />
&#8226; !&gt; (not greater than). <br />
没什么说的 <br />
<br />
<br />
七.语句块：Begin &#8230; end <br />
将多条语句作为一个块，类似与C++，C#中的{ } <br />
例如： <br />
Begin <br />
Set @ID1 = (select 1) <br />
Set @ID2 = (select 2) <br />
End <br />
<br />
八.If， if&#8230;else&#8230; <br />
语法： <br />
IF Boolean_expression <br />
{sql_statement | statement_block} <br />
[ELSE <br />
{sql_statement | statement_block}] <br />
例如： <br />
<br />
If @id is not null <br />
Print &#8216;@id is not null <br />
if @ID = 1 <br />
begin <br />
Set @ID = (select 1 + 1) <br />
end <br />
else <br />
begin <br />
set @ID=(select 1+2) <br />
end <br />
<br />
<br />
上面的例子用到了比较操作符，语句块，和IF的语法。 <br />
<br />
<br />
九.执行其他存储过程 EXEC <br />
例如 <br />
<br />
EXEC dbo.[Sales by Year] @Beginning_Date=&#8217;1/01/90&#8217;, @Ending_Date=&#8217;1/01/08&#8217; <br />
<br />
<br />
十.事务 <br />
<br />
语法： <br />
<br />
<br />
BEGIN TRAN[SACTION] [transaction_name | @tran_name_variable] <br />
<br />
<br />
例如 <br />
<br />
BEGIN TRAN <br />
-- 做某些操作，例如Insert into &#8230; <br />
if @@error &lt;&gt; 0 <br />
BEGIN <br />
ROLLBACK TRAN <br />
END <br />
else <br />
BEGIN <br />
COMMIT TRAN <br />
END <br />
<br />
十一.游标 <br />
<br />
我们可以在存储过程中用Select语句取出每一行数据进行操作，这就需要用到游标。 <br />
<br />
<br />
语法： <br />
DECLARE cursor_name CURSOR <br />
[LOCAL | GLOBAL] <br />
[FORWARD_ONLY | SCROLL] <br />
[STATIC | KEYSET | DYNAMIC | FAST_FORWARD] <br />
[READ_ONLY | SCROLL_LOCKS | OPTIMISTIC] <br />
[TYPE_WARNING] <br />
FOR select_statement <br />
<br />
[FOR UPDATE [OF column_name [,...n]]] <br />
<br />
<br />
例如： <br />
<br />
DECLARE @au_id varchar(11), @au_fname varchar(20) &#8211;申明变量 <br />
--申明一个游标 <br />
DECLARE authors_cursor CURSOR FOR <br />
SELECT au_id, au_fname FROM authors <br />
--打开游标 <br />
OPEN authors_cursor <br />
--取出值 <br />
FETCH NEXT FROM authors_cursor INTO @au_id, @au_fname <br />
--循环取出游标的值 <br />
WHILE @@FETCH_STATUS = 0 <br />
BEGIN <br />
Print @au_id <br />
Print @au_fname <br />
Print &#8216; &#8217; <br />
FETCH NEXT FROM authors_cursor <br />
INTO @au_id, @au_fname <br />
END <br />
CLOSE authors_cursor &#8211;关闭游标 <br />
DEALLOCATE authors_cursor --释放游标 <br />
我觉得上面的是存储过程常用的一些东东，如果要更深入的了解，更详细的帮助，请参考SQL Server的帮助文档
<img src ="http://www.blogjava.net/fuxueliang8806/aggbug/268074.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fuxueliang8806/" target="_blank">付学亮</a> 2009-04-29 11:42 <a href="http://www.blogjava.net/fuxueliang8806/archive/2009/04/29/268074.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用正则表达式</title><link>http://www.blogjava.net/fuxueliang8806/archive/2009/04/14/265538.html</link><dc:creator>付学亮</dc:creator><author>付学亮</author><pubDate>Tue, 14 Apr 2009 08:21:00 GMT</pubDate><guid>http://www.blogjava.net/fuxueliang8806/archive/2009/04/14/265538.html</guid><wfw:comment>http://www.blogjava.net/fuxueliang8806/comments/265538.html</wfw:comment><comments>http://www.blogjava.net/fuxueliang8806/archive/2009/04/14/265538.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fuxueliang8806/comments/commentRss/265538.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fuxueliang8806/services/trackbacks/265538.html</trackback:ping><description><![CDATA[<p>下面都是我收集的一些比较常用的正则表达式，因为平常可能在表单验证的时候，用到的比较多。特发出来，让各位朋友共同使用。呵呵。</p>
<p>匹配中文字符的正则表达式： [u4e00-u9fa5]<br />
评注：匹配中文还真是个头疼的事，有了这个表达式就好办了</p>
<p>匹配双字节字符(包括汉字在内)：[^x00-xff]<br />
评注：可以用来计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）</p>
<p>匹配空白行的正则表达式：ns*r<br />
评注：可以用来删除空白行</p>
<p>匹配HTML标记的正则表达式：&lt; (S*?)[^&gt;]*&gt;.*?|&lt; .*? /&gt;<br />
评注：网上流传的版本太糟糕，上面这个也仅仅能匹配部分，对于复杂的嵌套标记依旧无能为力</p>
<p>匹配首尾空白字符的正则表达式：^s*|s*$<br />
评注：可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等)，非常有用的表达式</p>
<p>&nbsp;</p>
<p>匹配Email地址的正则表达式：w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*<br />
评注：表单验证时很实用</p>
<p>匹配网址URL的正则表达式：[a-zA-z]+://[^s]*<br />
评注：网上流传的版本功能很有限，上面这个基本可以满足需求</p>
<p>匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$<br />
评注：表单验证时很实用</p>
<p>匹配国内电话号码：d{3}-d{8}|d{4}-d{7}<br />
评注：匹配形式如 0511-4405222 或 021-87888822</p>
<p>匹配腾讯QQ号：[1-9][0-9]{4,}<br />
评注：腾讯QQ号从10000开始</p>
<p>匹配中国邮政编码：[1-9]d{5}(?!d)<br />
评注：中国邮政编码为6位数字</p>
<p>匹配身份证：d{15}|d{18}<br />
评注：中国的身份证为15位或18位</p>
<p>匹配ip地址：d+.d+.d+.d+<br />
评注：提取ip地址时有用</p>
<p>匹配特定数字：<br />
^[1-9]d*$　 　 //匹配正整数<br />
^-[1-9]d*$ 　 //匹配负整数<br />
^-?[1-9]d*$　　 //匹配整数<br />
^[1-9]d*|0$　 //匹配非负整数（正整数 + 0）<br />
^-[1-9]d*|0$　　 //匹配非正整数（负整数 + 0）<br />
^[1-9]d*.d*|0.d*[1-9]d*$　　 //匹配正浮点数<br />
^-([1-9]d*.d*|0.d*[1-9]d*)$　 //匹配负浮点数<br />
^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$　 //匹配浮点数<br />
^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$　　 //匹配非负浮点数（正浮点数 + 0）<br />
^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$　　//匹配非正浮点数（负浮点数 + 0）<br />
评注：处理大量数据时有用，具体应用时注意修正</p>
<p>匹配特定字符串：<br />
^[A-Za-z]+$　　//匹配由26个英文字母组成的字符串<br />
^[A-Z]+$　　//匹配由26个英文字母的大写组成的字符串<br />
^[a-z]+$　　//匹配由26个英文字母的小写组成的字符串<br />
^[A-Za-z0-9]+$　　//匹配由数字和26个英文字母组成的字符串<br />
^w+$　　//匹配由数字、26个英文字母或者下划线组成的字符串</p>
<p>在使用RegularExpressionValidator验证控件时的验证功能及其验证表达式介绍如下:</p>
<p>只能输入数字：&#8220;^[0-9]*$&#8221;<br />
只能输入n位的数字：&#8220;^d{n}$&#8221;<br />
只能输入至少n位数字：&#8220;^d{n,}$&#8221;<br />
只能输入m-n位的数字：&#8220;^d{m,n}$&#8221;<br />
只能输入零和非零开头的数字：&#8220;^(0|[1-9][0-9]*)$&#8221;<br />
只能输入有两位小数的正实数：&#8220;^[0-9]+(.[0-9]{2})?$&#8221;<br />
只能输入有1-3位小数的正实数：&#8220;^[0-9]+(.[0-9]{1,3})?$&#8221;<br />
只能输入非零的正整数：&#8220;^+?[1-9][0-9]*$&#8221;<br />
只能输入非零的负整数：&#8220;^-[1-9][0-9]*$&#8221;<br />
只能输入长度为3的字符：&#8220;^.{3}$&#8221;<br />
只能输入由26个英文字母组成的字符串：&#8220;^[A-Za-z]+$&#8221;<br />
只能输入由26个大写英文字母组成的字符串：&#8220;^[A-Z]+$&#8221;<br />
只能输入由26个小写英文字母组成的字符串：&#8220;^[a-z]+$&#8221;<br />
只能输入由数字和26个英文字母组成的字符串：&#8220;^[A-Za-z0-9]+$&#8221;<br />
只能输入由数字、26个英文字母或者下划线组成的字符串：&#8220;^w+$&#8221;<br />
验证用户密码:&#8220;^[a-zA-Z]w{5,17}$&#8221;正确格式为：以字母开头，长度在6-18之间，</p>
<p>只能包含字符、数字和下划线。<br />
验证是否含有^%&amp;&#8217;,;=?$&#8221;等字符：&#8220;[^%&amp;',;=?$x22]+&#8221;<br />
只能输入汉字：&#8220;^[u4e00-u9fa5],{0,}$&#8221;<br />
验证Email地址：&#8220;^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$&#8221;<br />
验证InternetURL：&#8220;^http://([w-]+.)+[w-]+(/[w-./?%&amp;=]*)?$&#8221;<br />
验证电话号码：&#8220;^((d{3,4})|d{3,4}-)?d{7,8}$&#8221;</p>
<p>正确格式为：&#8220;XXXX-XXXXXXX&#8221;，&#8220;XXXX-XXXXXXXX&#8221;，&#8220;XXX-XXXXXXX&#8221;，</p>
<p>&#8220;XXX-XXXXXXXX&#8221;，&#8220;XXXXXXX&#8221;，&#8220;XXXXXXXX&#8221;。<br />
验证身份证号（15位或18位数字）：&#8220;^d{15}|d{}18$&#8221;<br />
验证一年的12个月：&#8220;^(0?[1-9]|1[0-2])$&#8221;正确格式为：&#8220;01&#8221;-&#8220;09&#8221;和&#8220;1&#8221;&#8220;12&#8221;<br />
验证一个月的31天：&#8220;^((0?[1-9])|((1|2)[0-9])|30|31)$&#8221;</p>
<p>正确格式为：&#8220;01&#8221;&#8220;09&#8221;和&#8220;1&#8221;&#8220;31&#8221;。</p>
<p>匹配中文字符的正则表达式： [u4e00-u9fa5]<br />
匹配双字节字符(包括汉字在内)：[^x00-xff]<br />
匹配空行的正则表达式：n[s| ]*r<br />
匹配HTML标记的正则表达式：/&lt; (.*)&gt;.*|&lt; (.*) /&gt;/<br />
匹配首尾空格的正则表达式：(^s*)|(s*$)<br />
匹配Email地址的正则表达式：w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*<br />
匹配网址URL的正则表达式：http://([w-]+.)+[w-]+(/[w- ./?%&amp;=]*)?</p>
<p>(1)应用：计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）<br />
String.prototype.len=function(){return this.replace([^x00-xff]/g,&#8221;aa&#8221;).length;}</p>
<p>(2)应用：javascript中没有像vbscript那样的trim函数，我们就可以利用这个表达式来实现<br />
String.prototype.trim = function()<br />
{<br />
return this.replace(/(^s*)|(s*$)/g, &#8220;&#8221;);<br />
}<br />
(3)应用：利用正则表达式分解和转换IP地址<br />
function IP2V(ip) //IP地址转换成对应数值<br />
{<br />
re=/(d+).(d+).(d+).(d+)/g //匹配IP地址的正则表达式<br />
if(re.test(ip))<br />
{<br />
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1<br />
}<br />
else<br />
{<br />
throw new Error(&#8221;Not a valid IP address!&#8221;)<br />
}<br />
}<br />
(4)应用：从URL地址中提取文件名的javascript程序<br />
s=&#8221;http://www.9499.net/page1.htm&#8221;;<br />
s=s.replace(/(.*/){0,}([^.]+).*/ig,&#8221;$2&#8243;) ; //Page1.htm<br />
(5)应用：利用正则表达式限制网页表单里的文本框输入内容<br />
用正则表达式限制只能输入中文：onkeyup=&#8221;value=&#8221;/blog/value.replace(/["^u4E00-u9FA5]/g,&#8221;) &#8221; onbeforepaste=&#8221;clipboardData.setData(&#8217;text&#8217;,clipboardData.getData(&#8217;text&#8217;).replace(/[^u4E00-u9FA5]/g,&#8221;))&#8221;<br />
用正则表达式限制只能输入全角字符： onkeyup=&#8221;value=&#8221;/blog/value.replace(/["^uFF00-uFFFF]/g,&#8221;) &#8221; onbeforepaste=&#8221;clipboardData.setData(&#8217;text&#8217;,clipboardData.getData(&#8217;text&#8217;).replace(/[^uFF00-uFFFF]/g,&#8221;))&#8221;<br />
用正则表达式限制只能输入数字：onkeyup=&#8221;value=&#8221;/blog/value.replace(/["^d]/g,&#8221;) &#8220;onbeforepaste= &#8220;clipboardData.setData(&#8217;text&#8217;,clipboardData.getData(&#8217;text&#8217;).replace(/[^d]/g,&#8221;))&#8221;<br />
用正则表达式限制只能输入数字和英文：onkeyup=&#8221;value=&#8221;/blog/value.replace(/[W]/g,&#8221;&#8221;) &#8220;onbeforepaste=&#8221;clipboardData.setData(&#8217;text&#8217;,clipboardData.getData(&#8217;text&#8217;).replace(/[^d]/g,&#8221;<br />
</p>
<img src ="http://www.blogjava.net/fuxueliang8806/aggbug/265538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fuxueliang8806/" target="_blank">付学亮</a> 2009-04-14 16:21 <a href="http://www.blogjava.net/fuxueliang8806/archive/2009/04/14/265538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>