﻿<?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-Junky's IT Notebook-随笔分类-SQL Server</title><link>http://www.blogjava.net/junky/category/18619.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 13 Jul 2007 10:38:23 GMT</lastBuildDate><pubDate>Fri, 13 Jul 2007 10:38:23 GMT</pubDate><ttl>60</ttl><item><title>SQL SERVER 关于外联接(Outer Join)及其他</title><link>http://www.blogjava.net/junky/archive/2007/07/12/129852.html</link><dc:creator>junky</dc:creator><author>junky</author><pubDate>Thu, 12 Jul 2007 07:44:00 GMT</pubDate><guid>http://www.blogjava.net/junky/archive/2007/07/12/129852.html</guid><wfw:comment>http://www.blogjava.net/junky/comments/129852.html</wfw:comment><comments>http://www.blogjava.net/junky/archive/2007/07/12/129852.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/junky/comments/commentRss/129852.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junky/services/trackbacks/129852.html</trackback:ping><description><![CDATA[<p><strong>一&nbsp;使用外联接</strong></p>
<p>　　以前在Oracle中用=(+)和(+)=来进行左外联接和右外联接；后来用SQL&nbsp;Server时用*=和=*进行外连接左外联接和右外联接；<br>现在决定用SQL-92的标准方法：[OUTER]&nbsp;JOIN，OUTER是可以省略的。</p>
<p>　　LEFT&nbsp;OUTER&nbsp;JOIN&nbsp;或&nbsp;LEFT&nbsp;JOIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;表示左外联接&nbsp;</p>
<p>　　RIGHT&nbsp;OUTER&nbsp;JOIN&nbsp;或&nbsp;RIGHT&nbsp;JOIN&nbsp;&nbsp;&nbsp;表示左外联接&nbsp;</p>
<p>　　FULL&nbsp;OUTER&nbsp;JOIN&nbsp;或&nbsp;FULL&nbsp;JOIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;表示左外联接</p>
<p>　　外联接的意思不用多说，我们都懂，但是JOIN到底怎么用呢？没有找到很好的资料，只能从例子中学习了：</p>
<p>　　1、这个例子也许没有实际意义，只是为了说明问题：</p>
<div style="SCROLLBAR-HIGHLIGHT-COLOR: buttonhighlight; OVERFLOW: auto; WIDTH: 500px">
<pre style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: black 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: black 1px solid; PADDING-TOP: 4px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #ededed">
<div><span style="COLOR: #000000">CREATE&nbsp;TABLE&nbsp;orders(order_id&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,&nbsp;firm_id&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,&nbsp;p_id&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)
CREATE&nbsp;TABLE&nbsp;firms&nbsp;(firm_id&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,&nbsp;f_name&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)
CREATE&nbsp;TABLE&nbsp;products(p_id&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,&nbsp;p_name&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)
select&nbsp;a.order_id,&nbsp;b.f_name,&nbsp;c.p_name
from&nbsp;orders&nbsp;a&nbsp;left&nbsp;join&nbsp;firms&nbsp;b&nbsp;on&nbsp;a.firm_id&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;b.firm_id
left&nbsp;join&nbsp;products&nbsp;c&nbsp;on&nbsp;a.p_id&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;c.p_id</span></div>
</pre>
</div>
<p>　　说明：orders表是主表，先和从表firms进行左联接，再和从表products进行左联接。</p>
<p>　　判断是外联接中的主表还是从表主要看from从句中各个表在LEFT&nbsp;JOIN或RIGHT&nbsp;JOIN两边的位置：LEFT&nbsp;JOIN左边的表是主表，RIGHT&nbsp;JOIN右边的表是主表；</p>
<p>　　ON表达了两个表连接的条件，一般外联接是等值联接，不等值联接意义不大；</p>
<p>　　在多个表的连接中，一个表既可以做主表又同时可以做从表，为了说明这个问题，我们修改以上SQL为：</p>
<div style="SCROLLBAR-HIGHLIGHT-COLOR: buttonhighlight; OVERFLOW: auto; WIDTH: 500px">
<pre style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: black 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: black 1px solid; PADDING-TOP: 4px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #ededed">
<div><span style="COLOR: #000000">select&nbsp;a.order_id,&nbsp;b.f_name,&nbsp;c.p_name
from&nbsp;orders&nbsp;a&nbsp;left&nbsp;join&nbsp;firms&nbsp;b&nbsp;on&nbsp;a.firm_id&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;b.firm_id
right&nbsp;join&nbsp;products&nbsp;c&nbsp;on&nbsp;a.order_id&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;c.p_id</span></div>
</pre>
</div>
<p>　　这个SQL没有什么意义，但从中可以看出a表既是b的主表又是c的从表；到底怎么用，还是要根据实际情况来决定是左联接还是右联接；</p>
<p>　　那天，看到了这样一个例子：</p>
<div style="SCROLLBAR-HIGHLIGHT-COLOR: buttonhighlight; OVERFLOW: auto; WIDTH: 500px">
<pre style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: black 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: black 1px solid; PADDING-TOP: 4px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #ededed">
<div><span style="COLOR: #000000">create&nbsp;table&nbsp;tab1&nbsp;(c1&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,&nbsp;c2&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,&nbsp;c3&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)
create&nbsp;table&nbsp;tab2&nbsp;(c1&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,&nbsp;c2&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,&nbsp;c3&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)
create&nbsp;table&nbsp;tab3&nbsp;(c1&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,&nbsp;c2&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,&nbsp;c3&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)
create&nbsp;table&nbsp;tab4&nbsp;(c1&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,&nbsp;c2&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,&nbsp;c3&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)
SELECT&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">
FROM&nbsp;tab1&nbsp;LEFT&nbsp;OUTER&nbsp;JOIN&nbsp;tab2&nbsp;ON&nbsp;tab1.c3&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tab2.c3
left&nbsp;OUTER&nbsp;JOIN&nbsp;tab3&nbsp;right&nbsp;OUTER&nbsp;JOIN&nbsp;tab4
ON&nbsp;tab3.c1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tab4.c1
ON&nbsp;tab2.c3&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tab4.c3</span></div>
</pre>
</div>
<p>　　这种用法还真少见，具体怎么个意思，还在理解中...我把它改写成：</p>
<div style="SCROLLBAR-HIGHLIGHT-COLOR: buttonhighlight; OVERFLOW: auto; WIDTH: 500px">
<pre style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: black 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: black 1px solid; PADDING-TOP: 4px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #ededed">
<div><span style="COLOR: #000000">SELECT&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">
FROM&nbsp;tab1&nbsp;left&nbsp;JOIN&nbsp;tab2&nbsp;ON&nbsp;tab1.c3&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tab2.c3
LEFT&nbsp;OUTER&nbsp;JOIN&nbsp;tab4&nbsp;ON&nbsp;tab2.c3&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tab4.c3
RIGHT&nbsp;OUTER&nbsp;JOIN&nbsp;tab3&nbsp;&nbsp;ON&nbsp;tab3.c1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tab4.c1</span></div>
</pre>
</div>
<p>　　也许它们是一个意思。我发现加个括号，看的更清楚一些（它是个嵌套）</p>
<div style="SCROLLBAR-HIGHLIGHT-COLOR: buttonhighlight; OVERFLOW: auto; WIDTH: 500px">
<pre style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: black 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: black 1px solid; PADDING-TOP: 4px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #ededed">
<div><span style="COLOR: #000000">SELECT&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">
FROM&nbsp;tab1&nbsp;LEFT&nbsp;OUTER&nbsp;JOIN&nbsp;tab2&nbsp;ON&nbsp;tab1.c3&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tab2.c3
left&nbsp;OUTER&nbsp;JOIN
(tab3&nbsp;right&nbsp;OUTER&nbsp;JOIN&nbsp;tab4
ON&nbsp;tab3.c1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tab4.c1)
ON&nbsp;tab2.c3&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tab4.c3</span></div>
</pre>
</div>
<p>　　<strong>二&nbsp;外联接中&nbsp;"ON&nbsp;+&nbsp;AND"&nbsp;与&nbsp;"ON&nbsp;+&nbsp;WHERE"&nbsp;的区别</strong></p>
<p>　　1、on条件是外联接时在生成临时表时使用的联结条件，不论从表是确定值还是NULL，主表所有的值都会出现；</p>
<p>　　如果再加上and条件；&nbsp;如果and条件引用的是主表的列，则对结果毫无影响，主表的所有纪录依然会全部出现；如果and条件引用的是从表的列，则不符合条件的从表纪录显示NULL；</p>
<p>　　2、where条件是在临时表生成后，再对临时表进行过滤的条件。临时表中的所有纪录都受影响，不符合条件的纪录被过滤出结果集；</p>
<p>　　3、示例：</p>
<div style="SCROLLBAR-HIGHLIGHT-COLOR: buttonhighlight; OVERFLOW: auto; WIDTH: 500px">
<pre style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: black 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: black 1px solid; PADDING-TOP: 4px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #ededed">
<div><span style="COLOR: #000000">select&nbsp;a.module_id,&nbsp;a.name,&nbsp;b.module_name
from&nbsp;fb_autocoding&nbsp;a&nbsp;left&nbsp;join&nbsp;fb_app_module&nbsp;b
on&nbsp;a.module_id&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;b.module_id
and&nbsp;b.module_internal_label&nbsp;</span><span style="COLOR: #000000">&lt;&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">LO</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;
select&nbsp;a.module_id,&nbsp;a.name,&nbsp;b.module_name
from&nbsp;fb_autocoding&nbsp;a&nbsp;left&nbsp;join&nbsp;fb_app_module&nbsp;b
on&nbsp;a.module_id&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;b.module_id
where&nbsp;b.module_internal_label&nbsp;</span><span style="COLOR: #000000">&lt;&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">LO</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;
</span></div>
</pre>
</div>
<p>　　<strong>三&nbsp;其他Join运算</strong></p>
<p>　　merge&nbsp;join：在处理其他联结之前，先把相关两个表联结在一起；</p>
<p>　　hash&nbsp;join：把一个表join到已经被执行过join的结果上；</p>
<p>　　用括号改变join的顺序：</p>
<div style="SCROLLBAR-HIGHLIGHT-COLOR: buttonhighlight; OVERFLOW: auto; WIDTH: 500px">
<pre style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: black 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: black 1px solid; PADDING-TOP: 4px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #ededed">
<div><span style="COLOR: #000000">select&nbsp;catalog.item,&nbsp;catalog.item_color,&nbsp;product.item,&nbsp;color.color_name
from&nbsp;catalog&nbsp;full&nbsp;outer&nbsp;join&nbsp;(product&nbsp;cross&nbsp;join&nbsp;color)
on&nbsp;catalog.item&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;product.item
and&nbsp;catalog.item_color&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;color.color_name;</span></div>
</pre>
</div>
<div style="DISPLAY: none">1</div>
<img src ="http://www.blogjava.net/junky/aggbug/129852.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junky/" target="_blank">junky</a> 2007-07-12 15:44 <a href="http://www.blogjava.net/junky/archive/2007/07/12/129852.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用 JdbcTemplate 自动返回 MS SQL SERVER 2005 自增主键值</title><link>http://www.blogjava.net/junky/archive/2007/07/11/129604.html</link><dc:creator>junky</dc:creator><author>junky</author><pubDate>Wed, 11 Jul 2007 05:54:00 GMT</pubDate><guid>http://www.blogjava.net/junky/archive/2007/07/11/129604.html</guid><wfw:comment>http://www.blogjava.net/junky/comments/129604.html</wfw:comment><comments>http://www.blogjava.net/junky/archive/2007/07/11/129604.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/junky/comments/commentRss/129604.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junky/services/trackbacks/129604.html</trackback:ping><description><![CDATA[JDBC3 中可以直接获取当前插入记录的 ID 值，具体的调用方式如下：<br><br>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
<div><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><span style="COLOR: rgb(0,0,0)">Statement&nbsp;stmt&nbsp;</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">&nbsp;conn.createStatement();<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>stmt.executeUpdate(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">INSERT&nbsp;INTO&nbsp;authors&nbsp;(first_name,&nbsp;last_name)&nbsp;values<br>&nbsp;(&#8242;George&#8242;,&nbsp;&#8242;Orwell&#8242;)</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">,&nbsp;Statement.RETURN_GENERATED_KEYS);<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>ResultSet&nbsp;rs&nbsp;</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">&nbsp;stmt.getGeneratedKeys();<br><img id=_226_252_Open_Image onclick="this.style.display='none'; document.getElementById('_226_252_Open_Text').style.display='none'; document.getElementById('_226_252_Closed_Image').style.display='inline'; document.getElementById('_226_252_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=_226_252_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_226_252_Closed_Text').style.display='none'; document.getElementById('_226_252_Open_Image').style.display='inline'; document.getElementById('_226_252_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: rgb(0,0,255)">if</span><span style="COLOR: rgb(0,0,0)">&nbsp;(&nbsp;rs.next()&nbsp;)&nbsp;</span><span id=_226_252_Closed_Text style="BORDER-RIGHT: rgb(128,128,128) 1px solid; BORDER-TOP: rgb(128,128,128) 1px solid; DISPLAY: none; BORDER-LEFT: rgb(128,128,128) 1px solid; BORDER-BOTTOM: rgb(128,128,128) 1px solid; BACKGROUND-COLOR: rgb(255,255,255)">...</span><span id=_226_252_Open_Text><span style="COLOR: rgb(0,0,0)">{<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;key&nbsp;</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">&nbsp;rs.getInt();<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
</div>
<br>由于实际与数据库交互采用的是 JdbcTemplate，因而需要找到它对这种方式的支持。经过实际的查看 Spring 的 API 发现其本身提供相应的方法支持，经过多次的实验后得到如下的实现方法：<br><br>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
<div><img id=_42_848_Open_Image onclick="this.style.display='none'; document.getElementById('_42_848_Open_Text').style.display='none'; document.getElementById('_42_848_Closed_Image').style.display='inline'; document.getElementById('_42_848_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=_42_848_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_42_848_Closed_Text').style.display='none'; document.getElementById('_42_848_Open_Image').style.display='inline'; document.getElementById('_42_848_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: rgb(0,0,255)">private</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">void</span><span style="COLOR: rgb(0,0,0)">&nbsp;insert(</span><span style="COLOR: rgb(0,0,255)">final</span><span style="COLOR: rgb(0,0,0)">&nbsp;Profile&nbsp;profile)</span><span id=_42_848_Closed_Text style="BORDER-RIGHT: rgb(128,128,128) 1px solid; BORDER-TOP: rgb(128,128,128) 1px solid; DISPLAY: none; BORDER-LEFT: rgb(128,128,128) 1px solid; BORDER-BOTTOM: rgb(128,128,128) 1px solid; BACKGROUND-COLOR: rgb(255,255,255)">...</span><span id=_42_848_Open_Text><span style="COLOR: rgb(0,0,0)">{<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">final</span><span style="COLOR: rgb(0,0,0)">&nbsp;String&nbsp;_save&nbsp;</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">insert&nbsp;into&nbsp;Newsletter_Profile&nbsp;(user_id,&nbsp;publication_id,&nbsp;last_update)&nbsp;values&nbsp;(?,&nbsp;?,&nbsp;getdate())</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">;<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;JdbcTemplate&nbsp;template&nbsp;</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">this</span><span style="COLOR: rgb(0,0,0)">.getJdbcTemplate();<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;KeyHolder&nbsp;keyHolder&nbsp;</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">new</span><span style="COLOR: rgb(0,0,0)">&nbsp;GeneratedKeyHolder();<br><img id=_310_769_Open_Image onclick="this.style.display='none'; document.getElementById('_310_769_Open_Text').style.display='none'; document.getElementById('_310_769_Closed_Image').style.display='inline'; document.getElementById('_310_769_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=_310_769_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_310_769_Closed_Text').style.display='none'; document.getElementById('_310_769_Open_Image').style.display='inline'; document.getElementById('_310_769_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;template.update(</span><span style="COLOR: rgb(0,0,255)">new</span><span style="COLOR: rgb(0,0,0)">&nbsp;PreparedStatementCreator()&nbsp;</span><span id=_310_769_Closed_Text style="BORDER-RIGHT: rgb(128,128,128) 1px solid; BORDER-TOP: rgb(128,128,128) 1px solid; DISPLAY: none; BORDER-LEFT: rgb(128,128,128) 1px solid; BORDER-BOTTOM: rgb(128,128,128) 1px solid; BACKGROUND-COLOR: rgb(255,255,255)">...</span><span id=_310_769_Open_Text><span style="COLOR: rgb(0,0,0)">{<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)">&nbsp;PreparedStatement&nbsp;createPreparedStatement(Connection&nbsp;con)<br><img id=_402_755_Open_Image onclick="this.style.display='none'; document.getElementById('_402_755_Open_Text').style.display='none'; document.getElementById('_402_755_Closed_Image').style.display='inline'; document.getElementById('_402_755_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=_402_755_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_402_755_Closed_Text').style.display='none'; document.getElementById('_402_755_Open_Image').style.display='inline'; document.getElementById('_402_755_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">throws</span><span style="COLOR: rgb(0,0,0)">&nbsp;SQLException&nbsp;</span><span id=_402_755_Closed_Text style="BORDER-RIGHT: rgb(128,128,128) 1px solid; BORDER-TOP: rgb(128,128,128) 1px solid; DISPLAY: none; BORDER-LEFT: rgb(128,128,128) 1px solid; BORDER-BOTTOM: rgb(128,128,128) 1px solid; BACKGROUND-COLOR: rgb(255,255,255)">...</span><span id=_402_755_Open_Text><span style="COLOR: rgb(0,0,0)">{<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;i&nbsp;</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">;<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;ps&nbsp;</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">&nbsp;con.prepareStatement(_save,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="BACKGROUND-COLOR: rgb(255,255,0)">Statement.RETURN_GENERATED_KEYS</span>);<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ps.setInt(</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">i,&nbsp;profile.getCustomerId().intValue());<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ps.setInt(</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">i,&nbsp;profile.getPublication().getId());<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)">&nbsp;ps;<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: rgb(0,0,0)">,&nbsp;keyHolder);<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;profile.setId(keyHolder.getKey().intValue());<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: rgb(0,0,0)">&nbsp;</span></div>
</div>
<br>特别需要注意的地方是<span id=_42_848_Open_Text><span id=_310_769_Open_Text><span id=_402_755_Open_Text><span style="COLOR: rgb(0,0,0)"><span style="BACKGROUND-COLOR: rgb(255,255,0)">Statement.RETURN_GENERATED_KEYS</span></span></span></span></span>，在使用MS SQL Server 2005 提供的 JDBC Driver 中上面的部分是必须的。之所以这么说是因为 google 出来的所有资料都是没有该部分的，甚至 Spring 自身的 document 中也是没有该参数的。我现在不知道那些代码是否能够真正的获取到 Key，但是现在我 suppose 它们是可以 run 的。<br><br>如果没有加入 <span id=_42_848_Open_Text><span id=_310_769_Open_Text><span id=_402_755_Open_Text><span style="COLOR: rgb(0,0,0)"><span style="BACKGROUND-COLOR: rgb(255,255,0)">Statement.RETURN_GENERATED_KEYS&nbsp; </span></span></span></span></span>，在实际进行数据库操作时会出现如下的异常：<br>PreparedStatementCallback; uncategorized SQLException for SQL []; SQL state [null]; error code [0]; The statement must be executed before any results can be obtained.; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: The statement must be executed before any results can be obtained.<br>caused by : com.microsoft.sqlserver.jdbc.SQLServerException: The statement must be executed before any results can be obtained.<br><span>org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL []; SQL state [null]; error code [0]; The statement must be executed before any results can be obtained.; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: The statement must be executed before any results can be obtained. </span><br>Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The statement must be executed before any results can be obtained. <br>at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source) <br>at com.microsoft.sqlserver.jdbc.SQLServerStatement.getGeneratedKeys(Unknown Source) <br>at weblogic.jdbc.wrapper.PreparedStatement_com_microsoft_sqlserver_jdbc_SQLServerPreparedStatement.getGeneratedKeys(Unknown Source) <br>at org.springframework.jdbc.core.JdbcTemplate$3.doInPreparedStatement(JdbcTemplate.java:772) <br>at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:527) <br>at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:767) <br>at com.fdc.reports20.dao.NewsletterDAO.insert(NewsletterDAO.java:179) <br>at com.fdc.reports20.dao.NewsletterDAO.save(NewsletterDAO.java:153) <br>at com.fdc.reports20.dao.NewsletterDAO.update(NewsletterDAO.java:138) <br>at com.fdc.reports20.business.service.user.AlertServiceImpl.updateNewsletter(AlertServiceImpl.java:146) <br>at com.fdc.reports20.business.service.user.AlertServiceImpl$$FastClassByCGLIB$$52b80fbc.invoke() <br>at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149) <br>at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:674) <br>at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:154) <br>at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:52) <br>at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176) <br>at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:53) <br>at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176) <br>at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107) <br>at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176) <br>at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) <br>at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176) <br>at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:615) <br>at com.fdc.reports20.business.service.user.AlertServiceImpl$$EnhancerByCGLIB$$a12ee5d8.updateNewsletter() <br>at com.fdc.reports20.web.delegate.AlertBD.updateNewsletter(AlertBD.java:78) <br>at com.fdc.reports20.web.jpf.um.workbench.WorkBenchController.editPublicationEmails(WorkBenchController.java:149) <br>at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) <br><span id=_42_848_Open_Text><span id=_310_769_Open_Text><span id=_402_755_Open_Text><span style="COLOR: rgb(0,0,0)"><span style="BACKGROUND-COLOR: rgb(255,255,0)"></span></span></span></span><br></span>
<img src ="http://www.blogjava.net/junky/aggbug/129604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junky/" target="_blank">junky</a> 2007-07-11 13:54 <a href="http://www.blogjava.net/junky/archive/2007/07/11/129604.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>前触发器和后触发器简介(downmoon)</title><link>http://www.blogjava.net/junky/archive/2007/06/19/125047.html</link><dc:creator>junky</dc:creator><author>junky</author><pubDate>Tue, 19 Jun 2007 01:35:00 GMT</pubDate><guid>http://www.blogjava.net/junky/archive/2007/06/19/125047.html</guid><wfw:comment>http://www.blogjava.net/junky/comments/125047.html</wfw:comment><comments>http://www.blogjava.net/junky/archive/2007/06/19/125047.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/junky/comments/commentRss/125047.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junky/services/trackbacks/125047.html</trackback:ping><description><![CDATA[<p>前触发器和后触发器简介(downmoon)<br><br>&nbsp;&nbsp;&nbsp; 触发器是一种特殊的存储过程。当Insert Update 或者Delete 语句修改表中一个或者多个行时执行触发器。因为SQL Server 对特定表上的每一个指定操作调用一个触发器，所以可以使用触发器扩展SQL Sever 的内置完整性和数据操纵功能.<br>&nbsp;&nbsp;&nbsp; 注意:<span style="COLOR: rgb(255,0,0)">不像Delete 语句，Trancate Table 语句不激活触发器，Write Text 语句也不激活触发器。</span><br>&nbsp;&nbsp;&nbsp; 在SQL Sever 2000 中支持两种类型的触发器，前触发器(Instead Of Trigger)和后触发器(After Trigger)。前触发器就是在语句执行之前激活触发器，而后触发器就是在语句执行之后激活触发器。可以通过FOR 子句来选择使用何种触发器。<br>&nbsp;&nbsp;&nbsp; 当为每一种操作创建一个触发器时，可以为所有三种操作创建一个触发器，并且使用相应的编程技术处理每一种操作。下面的示例在For 子句中列出了三种语句类型并，且使用条件语句将相应的跟踪值插入到CustUpdLog 表中。<br></p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
<p><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><span style="COLOR: rgb(0,0,255)">Create</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">Trigger</span><span style="COLOR: rgb(0,0,0)">&nbsp;TrackCustomerUpdates<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">On</span><span style="COLOR: rgb(0,0,0)">&nbsp;AppDta.dbo.Customer<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">For</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">Insert</span><span style="COLOR: rgb(0,0,0)">,</span><span style="COLOR: rgb(0,0,255)">Update</span><span style="COLOR: rgb(0,0,0)">,</span><span style="COLOR: rgb(0,0,255)">Delete</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">As</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">Declare</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,128,0)">@InsertedCount</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,0)">Int</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">Declare</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,128,0)">@DeletedCount</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,0)">Int</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">Set</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,128,0)">@InsertedCount</span><span style="COLOR: rgb(128,128,128)">=</span><span style="COLOR: rgb(0,0,0)">(</span><span style="COLOR: rgb(0,0,255)">Select</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(255,0,255)">Count</span><span style="COLOR: rgb(0,0,0)">(</span><span style="COLOR: rgb(128,128,128)">*</span><span style="COLOR: rgb(0,0,0)">)</span><span style="COLOR: rgb(0,0,255)">From</span><span style="COLOR: rgb(0,0,0)">&nbsp;inserted)<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">Set</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,128,0)">@DeletedCount</span><span style="COLOR: rgb(128,128,128)">=</span><span style="COLOR: rgb(0,0,0)">(</span><span style="COLOR: rgb(0,0,255)">Select</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(255,0,255)">Count</span><span style="COLOR: rgb(0,0,0)">(</span><span style="COLOR: rgb(128,128,128)">*</span><span style="COLOR: rgb(0,0,0)">)</span><span style="COLOR: rgb(0,0,255)">From</span><span style="COLOR: rgb(0,0,0)">&nbsp;deleted)<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">If</span><span style="COLOR: rgb(0,0,0)">&nbsp;(&nbsp;</span><span style="COLOR: rgb(0,128,0)">@InsertedCount</span><span style="COLOR: rgb(128,128,128)">&gt;</span><span style="FONT-WEIGHT: bold; COLOR: rgb(128,0,0)">0</span><span style="COLOR: rgb(0,0,0)">)</span><span style="COLOR: rgb(0,0,255)">Begin</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">Insert</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">Into</span><span style="COLOR: rgb(0,0,0)">&nbsp;AppDta.dbo.CustUpdLog<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>(&nbsp;CustID,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>Action,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>UpdUser,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>UpdDateTime)<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">Select</span><span style="COLOR: rgb(0,0,0)">&nbsp;CustId,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(255,0,255)">Case</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">When</span><span style="COLOR: rgb(0,0,0)">(&nbsp;</span><span style="COLOR: rgb(0,128,0)">@DeletedCount</span><span style="COLOR: rgb(128,128,128)">&gt;</span><span style="FONT-WEIGHT: bold; COLOR: rgb(128,0,0)">0</span><span style="COLOR: rgb(0,0,0)">)</span><span style="COLOR: rgb(0,0,255)">Then</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(255,0,0)">'</span><span style="COLOR: rgb(255,0,0)">Update</span><span style="COLOR: rgb(255,0,0)">'</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">Else</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(255,0,0)">'</span><span style="COLOR: rgb(255,0,0)">Insert</span><span style="COLOR: rgb(255,0,0)">'</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">End</span><span style="COLOR: rgb(0,0,0)">,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(255,0,255)">Current_User</span><span style="COLOR: rgb(0,0,0)">,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(255,0,255)">Current_TimeStamp</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">From</span><span style="COLOR: rgb(0,0,0)">&nbsp;inserted<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">End</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">Else</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">If</span><span style="COLOR: rgb(0,0,0)">(</span><span style="COLOR: rgb(0,128,0)">@DeletedCount</span><span style="COLOR: rgb(128,128,128)">&gt;</span><span style="FONT-WEIGHT: bold; COLOR: rgb(128,0,0)">0</span><span style="COLOR: rgb(0,0,0)">)</span><span style="COLOR: rgb(0,0,255)">Begin</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">Insert</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">Into</span><span style="COLOR: rgb(0,0,0)">&nbsp;AppDta.dbo.CustUpdLog<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>(&nbsp;CustId,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>Action,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>UpdUser,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>UpdDateTime)<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">select</span><span style="COLOR: rgb(0,0,0)">&nbsp;CustId,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(255,0,0)">'</span><span style="COLOR: rgb(255,0,0)">Delete</span><span style="COLOR: rgb(255,0,0)">'</span><span style="COLOR: rgb(0,0,0)">,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(255,0,255)">Current_User</span><span style="COLOR: rgb(0,0,0)">,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(255,0,255)">Current_TimeStamp</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">From</span><span style="COLOR: rgb(0,0,0)">&nbsp;deleted<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">End</span></p>
</div>
<p><br>&nbsp;&nbsp;&nbsp; 正如本例所示，无论何时Insert 或者Update 语句影响一个或者多行时，inserted 临时表都有记录行。无论何时Delete 或者Update 语句影响一个或者多行时，deleted 临时表都有记录行。对于一个Update 语句，deleted 临时表有旧行，inserted 临时表有新行。这个示例还反映了触发器的另一个重要方面：<span style="COLOR: rgb(255,0,0)">对于某个表的Update 或者Delete 操作，即使该语句没有影响到行，也激活触发器 (也就是说没有满足Where 子句的行)。 触发器的存储过程应该预测这种可能性。</span><br><br><br>&nbsp;&nbsp;&nbsp; 不仅可以为一个表创建多个触发器，而且还可以为一个表的同一个SQL 语句(例如Update 语句)创建多个后触发器，不能为同一个SQL 语句创建多个前触发器。每一个新的Create Trigger 语句增加触发器到那些指定表和语句已有的触发器中。对于所创建的多个触发器，可以用系统存储过程sp_settriggerorder 来指定第一个被激活的触发器和最后一个被激活的触发器，而对于其他的触发器，则不能指定其激活顺序，只能由系统决定。这种触发器的特征不会引起任何特殊的问题。因为总是可以实现各种动作作为正常的存储过程，并且按照要求的顺序从一个触发器中调用它们。<br><br>&nbsp;&nbsp;&nbsp; <span style="COLOR: rgb(51,51,153)">尽管触发器是一种存储过程，但是不能使用Execute 语句调用它</span>，如果有希望共享触发器和正常的存储过程的编码，那么只需把共享代码放在存储过程中，从触发器中调用它。如果一个触发器修改一个表，那么这些修改可能会激活另一个触发器，或者本身。在默认情况下，SQL Sever 允许这种嵌套的触发器调用深度为32层。虽然我们建议允许嵌套的和叠代的触发器，但是可以使用系统存储过程禁止这么做。下面的语句<span style="COLOR: rgb(51,51,153)">在指定的数据库上防止叠代触发器：</span><br>sp_dboption AppDta,`recursive triggers',`false'<br>&nbsp;&nbsp;&nbsp; 为了<span style="COLOR: rgb(51,51,153)">在所有数据库中防止嵌套触发器调用(包括叠代调用)</span>，可以使用下面的语句：<br>sp_configure `nested triggers',0<br><br>&nbsp;&nbsp;&nbsp; 前面以后触发器为例介绍了触发器的基本内容，下面再介绍一下前触发器的不同之处。<span style="COLOR: rgb(255,0,0)">要创建一个前触发器必须用Instead Of 显式声明</span>，如下面的例子：<br></p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
<p><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><span style="COLOR: rgb(0,0,255)">create</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">Trigger</span><span style="COLOR: rgb(0,0,0)">&nbsp;TrackCustomerUpdates<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">On</span><span style="COLOR: rgb(0,0,0)">&nbsp;AppDta.dbo.Customer<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>Instead&nbsp;</span><span style="COLOR: rgb(0,0,255)">Of</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">Update</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">As</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">Insert</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">Into</span><span style="COLOR: rgb(0,0,0)">&nbsp;AppDta.dbo.CustUpdLog<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>(CustId,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>Action,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>UpdUser,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>UpdDateTime)<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">Select</span><span style="COLOR: rgb(0,0,0)">&nbsp;CustId,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&#8216;</span><span style="COLOR: rgb(0,0,255)">Update</span><span style="COLOR: rgb(0,0,0)">&#8217;,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(255,0,255)">Current_User</span><span style="COLOR: rgb(0,0,0)">,<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(255,0,255)">Current_TimeStamp</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">From</span><span style="COLOR: rgb(0,0,0)">&nbsp;inserted</span></p>
</div>
<p><br>&nbsp;&nbsp;&nbsp; 与后触发器不同的是：前触发器既可以在表又可以在视图上创建，但一条语句只能创建一个前触发器，因此，前触发器不存在激活顺序问题<br><br><br>触发器应用举例：从当前数据库服务器的Shop表Insert操作同步到另一台服务器的Shop。<br><br></p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
<p><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><span style="COLOR: rgb(0,0,255)">CREATE</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">TRIGGER</span><span style="COLOR: rgb(0,0,0)">&nbsp;Trigger_SynShopForInsert1<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">ON</span><span style="COLOR: rgb(0,0,0)">&nbsp;dbo.Shop<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">FOR</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">INSERT</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">AS</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">insert</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">into</span><span style="COLOR: rgb(0,0,0)">&nbsp;OtherServer.dbo.shop<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>(<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>lngShopID,strShopCode,strName,strShopName,strDescription,lngIndex<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>)<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">select</span><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;lngShopID,strShopCode,strName,strShopName,strDescription,lngIndex<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">from</span><span style="COLOR: rgb(0,0,0)">&nbsp;shop&nbsp;</span><span style="COLOR: rgb(0,0,255)">where</span><span style="COLOR: rgb(0,0,0)">&nbsp;lngShopID&nbsp;</span><span style="COLOR: rgb(128,128,128)">in</span><span style="COLOR: rgb(0,0,0)">&nbsp;(</span><span style="COLOR: rgb(0,0,255)">select</span><span style="COLOR: rgb(0,0,0)">&nbsp;lngshopid&nbsp;</span><span style="COLOR: rgb(0,0,255)">from</span><span style="COLOR: rgb(0,0,0)">&nbsp;inserted)<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span></p>
</div>
<p><br>或者：<br><br></p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
<p><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><span style="COLOR: rgb(0,0,255)">CREATE</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">TRIGGER</span><span style="COLOR: rgb(0,0,0)">&nbsp;Trigger_SynShopForInsert2<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">ON</span><span style="COLOR: rgb(0,0,0)">&nbsp;dbo.Shop<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">FOR</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">INSERT</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">AS</span><span style="COLOR: rgb(0,0,0)"><br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">insert</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">into</span><span style="COLOR: rgb(0,0,0)">&nbsp;OtherServer.dbo.shop<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>(<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>lngShopID,strShopCode,strName,strShopName,strDescription,lngIndex<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>)<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">select</span><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;lngShopID,strShopCode,strName,strShopName,strDescription,lngIndex<br><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></span><span style="COLOR: rgb(0,0,255)">from</span><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;inserted</span></p>
</div>
<img src ="http://www.blogjava.net/junky/aggbug/125047.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junky/" target="_blank">junky</a> 2007-06-19 09:35 <a href="http://www.blogjava.net/junky/archive/2007/06/19/125047.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>连接SQL Server时报的异常之处理步骤</title><link>http://www.blogjava.net/junky/archive/2006/12/22/89406.html</link><dc:creator>junky</dc:creator><author>junky</author><pubDate>Fri, 22 Dec 2006 01:06:00 GMT</pubDate><guid>http://www.blogjava.net/junky/archive/2006/12/22/89406.html</guid><wfw:comment>http://www.blogjava.net/junky/comments/89406.html</wfw:comment><comments>http://www.blogjava.net/junky/archive/2006/12/22/89406.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/junky/comments/commentRss/89406.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junky/services/trackbacks/89406.html</trackback:ping><description><![CDATA[1. [SQLServer 2000 Driver for JDBC]Error establishing socket.<br /><br />   
<p>See  com.borland.dx.dataset.DataSetException  error  code:    BASE+66  <br /><span class="yinchang"><a href="http://www.faq-it.org/archives/solaris/">solaris</a></span>  <br />com.borland.dx.dataset.DataSetException:  [Microsoft][SQLServer  2000  Driver  for  JDBC]Error  establishing  socket.  <br /> <br />           at  com.borland.dx.dataset.DataSetException.a(Unknown  Source)  <br /> <br />           at  com.borland.dx.dataset.DataSetException.throwException(Unknown  Source)  <br /> <br />           at  com.borland.dx.dataset.DataSetException.SQLException(Unknown  Source)  <br /> <br />           at  com.borland.dx.sql.dataset.Database.openConnection(Unknown  Source)  <br /> <br />           at  com.borland.jdbcx.metadata.DatabaseInfo.openConnection(Unknown  Source)  <br /> <br />           at  com.borland.jdbcx.metadata.e.run(Unknown  Source)  <br /> <br />Chained  exception:  <br /> <br />java.sql.SQLException:  [Microsoft][SQLServer  2000  Driver  for  JDBC]Error  establishing  socket.  <br /> <br />           at  com.microsoft.jdbc.base.BaseExceptions.createException(Unknown  Source)  <br /> <br />           at  com.microsoft.jdbc.base.BaseExceptions.getException(Unknown  Source)  <br /> <br />           at  com.microsoft.jdbc.base.BaseExceptions.getException(Unknown  Source)  <br /> <br />           at  com.microsoft.jdbc.sqlserver.tds.TDSConnection.&lt;init&gt;(Unknown  Source)  <br /> <br />           at  com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown  Source)  <br /> <br />           at  com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown  Source)  <br /> <br />           at  com.microsoft.jdbc.base.BaseConnection.open(Unknown  Source)  <br /> <br />           at  com.microsoft.jdbc.base.BaseDriver.connect(Unknown  Source)  <br /> <br />           at  java.sql.DriverManager.getConnection(DriverManager.java:512)  <br /> <br />           at  java.sql.DriverManager.getConnection(DriverManager.java:171)  <br /> <br />           at  com.borland.dx.sql.dataset.Database.openConnection(Unknown  Source)  <br /> <br />           at  com.borland.jdbcx.metadata.DatabaseInfo.openConnection(Unknown  Source)  <br /> <br />           at  com.borland.jdbcx.metadata.e.run(Unknown  Source)  <br /> <br />是什么原因啊？  <br />---------------------------------------------------------------  <br /> <br />1、下载Microsoft  SQL  Server  2000  Service  Pack  3a并安装，SQL请选用混和安装模式！！！  <br />http://www.microsoft.com/downloads/details.aspx?FamilyId=90DCD52C-0488-4E46-AFBF-ACACE5369FA3&amp;displaylang=zh-cn  <br />   解压缩sp3的升级包后,还要点击setup安装.才能成功升级到sp3  </p><p><br />2、下载SQL  Server  2000  Driver  for  JDBC  Service  Pack  3  <br />http://www.microsoft.com/downloads/details.aspx?FamilyId=07287B11-0502-461A-B138-2AA54BFDC03A&amp;displaylang=en  <br /> <br />3、运行时关闭防火墙<br /></p><img src ="http://www.blogjava.net/junky/aggbug/89406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junky/" target="_blank">junky</a> 2006-12-22 09:06 <a href="http://www.blogjava.net/junky/archive/2006/12/22/89406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>