﻿<?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-DreamAngel-随笔分类-SQL</title><link>http://www.blogjava.net/DreamAngel/category/37382.html</link><description>如果你希望成功，以恒心为良友，以经验为参谋，以小心为兄弟，以希望为哨兵。</description><language>zh-cn</language><lastBuildDate>Sun, 22 Sep 2013 20:05:16 GMT</lastBuildDate><pubDate>Sun, 22 Sep 2013 20:05:16 GMT</pubDate><ttl>60</ttl><item><title>win7下sql2005安装配置常见问题</title><link>http://www.blogjava.net/DreamAngel/archive/2013/09/21/404271.html</link><dc:creator>飞翔天使</dc:creator><author>飞翔天使</author><pubDate>Sat, 21 Sep 2013 12:21:00 GMT</pubDate><guid>http://www.blogjava.net/DreamAngel/archive/2013/09/21/404271.html</guid><wfw:comment>http://www.blogjava.net/DreamAngel/comments/404271.html</wfw:comment><comments>http://www.blogjava.net/DreamAngel/archive/2013/09/21/404271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/DreamAngel/comments/commentRss/404271.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/DreamAngel/services/trackbacks/404271.html</trackback:ping><description><![CDATA[<p><strong>win7下sql2005安装提示iis功能和com+目录要求的解决<br /></strong>iis功能 : win7下，iis项目中 &#8220;万维网服务&#8221;中有项目没有勾选。<br />到控制面板，打开IIS Features，点左边的加号，打开详细信息，复选上以下组件： </p>
<fieldset>1: Web Managerment Tools\IIS 6 Management Compatibility\IIS6 WMI Compatibility<br />2: Web Managerment Tools\IIS 6 Management Compatibility\IIS6 Metabase and IIS 6 Configuration Compatibility<br />3: World Wide Web Services\Application Development Features\Asp.net<br />4: World Wide Web Services\Common Http Features\Http Redirection<br />5: World Wide Web Services\Security\Windows Authentication</fieldset><br />com+目录需求：Com+ System Application服务未启动，其依赖项System Event Notification Service 服务被禁用，手动启动又报错 。&nbsp; 
<p>解决：</p>
<p>开始-&gt;运行-&gt;输入&#8221;services.msc&#8221;，我看了看COM+的相关服务，就差COM+ System Applycation这项服务没开，提示1068错误，依赖的服务没启动！！！右键COM+ System Application-&gt;属性-&gt;依存关系，System Event Notification Service 服务被禁用，手动启动又报错。找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\COMSysApp，看到了一个项&#8221;DependOnService&#8221;，打开看了下，依存的服务有三项</p>
<p>&#8220;RpcSs<br />EventSystem<br />SENS<br />&#8221;</p>
<p>在命令行：<br />sc start RpcSs<br />依次开启每个服务(可以跳过前两个)</p>
<p>sc start SENS，提示服务被禁用，(服务可能没有显示)，再用命令行，用下列命令将SENS这个服务设成了手动<br />sc config sens start= demand<br />注意=号后面有空格，<br />sc start COMSysApp <br />成功！回到SQL 2005安装，安装不提示&#8220;COM+ 目录要求警告&#8221;了，安装过程也没有开篇的&#8220;无法在 COM+ 目录配置。。。&#8221;的问题了！<br />C:\Users\vovi&gt;sc getdisplayname sens<br />[SC] GetServiceDisplayName 成功<br />名称 = System Event Notification Service<br /><br /><br /><strong>打开sql server 2005 的1433端口<br /></strong>第一种方法：<br />打开SQL Server 配置管理器，展开SQL Server 2005/2008网络配置节点，展开协议节点，在协议右边启用TCP/IP协议，在其中的TCP/IP协议属性中，在IPAll这一项，将TCP端口设置为1433；重新启动SQL Server；如果防火墙没限制，现在就OK了。<br /><img height="515" alt="" src="http://www.blogjava.net/images/blogjava_net/dreamangel/sql/1433.png" width="472" border="0" /><br /><br />第二种方法：<br />配置工具&#8212;&gt;SQL Server外围应用配置器&#8212;&gt;服务和连接的外围应用配置器&#8212;&gt;Datebase Engine&#8212;&gt;远程连接&#8212;&gt;选择【本地连接和远程连接】&#8212;&gt;选择【同时使用TCP/IP和named pipes】&#8212;&gt;点击应用确定&#8212;&gt;断开SQL Server 2005连接，重新连接SQL Server 2005 &#8212;&gt;停止服务&#8212;&gt;启动服务。<img height="378" alt="" src="http://www.blogjava.net/images/blogjava_net/dreamangel/sql/1433-2.png" width="500" border="0" /><br /></p><img src ="http://www.blogjava.net/DreamAngel/aggbug/404271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/DreamAngel/" target="_blank">飞翔天使</a> 2013-09-21 20:21 <a href="http://www.blogjava.net/DreamAngel/archive/2013/09/21/404271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server中如何取得刚插入的标识值</title><link>http://www.blogjava.net/DreamAngel/archive/2012/05/11/377920.html</link><dc:creator>飞翔天使</dc:creator><author>飞翔天使</author><pubDate>Fri, 11 May 2012 08:20:00 GMT</pubDate><guid>http://www.blogjava.net/DreamAngel/archive/2012/05/11/377920.html</guid><wfw:comment>http://www.blogjava.net/DreamAngel/comments/377920.html</wfw:comment><comments>http://www.blogjava.net/DreamAngel/archive/2012/05/11/377920.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/DreamAngel/comments/commentRss/377920.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/DreamAngel/services/trackbacks/377920.html</trackback:ping><description><![CDATA[<div id="cnblogs_post_body">
<div>
<div fc05="" fc11="" nbw-blog="" ztag="" js-fs2="">
<p>数据库实际应用中，我们往往需要得到刚刚插入 的标志值来往相关表中写入数据。但我们平常得到的真的是我们需要的那个值么？<br />有时我们会使用 SELECT @@Identity 来获得我们刚刚插入的值，比如下面的代码</p>
<p>代码一：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">use</span><span style="color: #000000">&nbsp;tempdb<br /></span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">exists</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;sys.objects&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">object_id</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">object_id</span><span style="color: #000000">(N</span><span style="color: #ff0000">'</span><span style="color: #ff0000">[test1]</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">and</span><span style="color: #000000">&nbsp;type&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;(N</span><span style="color: #ff0000">'</span><span style="color: #ff0000">u</span><span style="color: #ff0000">'</span><span style="color: #000000">))<br /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">table</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">test1</span><span style="color: #ff0000">]</span><span style="color: #000000"><br /></span><span style="color: #0000ff">go</span><span style="color: #000000"><br /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">table</span><span style="color: #000000">&nbsp;test1<br />(<br />id&nbsp;</span><span style="color: #000000; font-weight: bold">int</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">identity</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">),<br />content&nbsp;</span><span style="color: #000000; font-weight: bold">nvarchar</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">100</span><span style="color: #000000">)<br />)<br /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;test1&nbsp;(content)&nbsp;</span><span style="color: #0000ff">values</span><span style="color: #000000">&nbsp;(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">solorez</span><span style="color: #ff0000">'</span><span style="color: #000000">)<br /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #008000; font-weight: bold">@@identity</span></div>
<p>乐观情况下，这样做是没问题的，但如果我们如果先运行下面的代码二创建一个触发器、再运行代码三：</p>
<p>代码二：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">table</span><span style="color: #000000">&nbsp;test2<br />(<br />id&nbsp;</span><span style="color: #000000; font-weight: bold">int</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">identity</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">100</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">),<br />content&nbsp;</span><span style="color: #000000; font-weight: bold">nvarchar</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">100</span><span style="color: #000000">)<br />)<br /><br /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">trigger</span><span style="color: #000000">&nbsp;tri_test1_identitytest_I<br /></span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;test1&nbsp;after&nbsp;</span><span style="color: #0000ff">insert</span><span style="color: #000000"><br /></span><span style="color: #0000ff">as</span><span style="color: #000000"><br /></span><span style="color: #0000ff">begin</span><span style="color: #000000"><br /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;test2&nbsp;<br /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;content&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;inserted<br /></span><span style="color: #0000ff">end</span></div>
<p>代码三：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;test1&nbsp;(content)&nbsp;</span><span style="color: #0000ff">values</span><span style="color: #000000">&nbsp;(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">solorez2</span><span style="color: #ff0000">'</span><span style="color: #000000">)<br /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #008000; font-weight: bold">@@identity</span></div>
<p>&nbsp;<br />我们可以看到，此时得到的标识值已经是100多了，很明显，这是表test2的生成的标识值，已经不是我们想要的 了。<br />我们可以看看@@identity的定义：Identity<br />原来，@@identity返回的是当前事务最后插入的标识值。<br />这 时我们或许会用下面的方法：</p>
<p>代码四：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;test1&nbsp;(content)&nbsp;</span><span style="color: #0000ff">values</span><span style="color: #000000">&nbsp;(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">solorez3</span><span style="color: #ff0000">'</span><span style="color: #000000">)<br /></span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;IDENT_CURRENT(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">test1</span><span style="color: #ff0000">'</span><span style="color: #000000">)</span></div>
<p>看来结果还比较正确，但如果我们在多次运行代码四的同时运行下面的代码五：</p>
<p>代码五：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;test1&nbsp;(content)&nbsp;</span><span style="color: #0000ff">values</span><span style="color: #000000">&nbsp;(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">solorez3</span><span style="color: #ff0000">'</span><span style="color: #000000">)<br /></span><span style="color: #0000ff">waitfor</span><span style="color: #000000">&nbsp;delay&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">00:00:20</span><span style="color: #ff0000">'</span><span style="color: #000000"><br /></span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;IDENT_CURRENT(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">test1</span><span style="color: #ff0000">'</span><span style="color: #000000">)</span></div>
<p>&nbsp;<br />结果又 不是我们想要的了！<br />再看看IDENT_CURRENT(Tablename) 的定义：IDENT_CURRENT(Tablename)<br />是 返回指定表的最后标识值。</p>
<p>到这里，是该亮出答案的时候了，我们可以使用下面的代码：</p>
<p>代码六：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;test1&nbsp;(content)&nbsp;</span><span style="color: #0000ff">values</span><span style="color: #000000">&nbsp;(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">solorez3</span><span style="color: #ff0000">'</span><span style="color: #000000">)<br /></span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">scope_identity</span><span style="color: #000000">()</span></div>
<p>这时，我们无论是添加触发器还是运行并行插入，得到的始终是当前事务的标识值。</p>
<p>scope_identity()的定义：scope_identity()<br />&nbsp;</p>
<p>&nbsp;</p>
<p><br />Table表中有一字段为自增长列(也称标识列，即Identity Increment)，那么如何获取该列的下一行标识值呢，或刚插入的标识值？<br />&nbsp;</p>
<p>经过一番探索，下面的代码有效：</p>
<p>--获取刚插入的标识值</p>
<p>SELECT IDENT_CURRENT('TableName') from TableName<br />&nbsp;</p>
<p>--获取下一行的标识值</p>
<p>declare @NextIdentity int</p>
<p>SELECT @NextIdentity = IDENT_CURRENT('TableName') + IDENT_INCR('TableName') from TableName</p>
<p>if (@NextIdentity is null)</p>
<p>&nbsp;&nbsp; set @NextIdentity = IDENT_SEED('TableName')&nbsp; --如查询表为空，则取标识列起始值</p>
<p><br />将TableName换成所需计算的表名即可。</p>
<p>&nbsp;</p>
<p>摘要：本文向您介绍如何在SQL Server中准确的获得标识值，在SQL Server中，有三种不同的函数可以帮助我们达到目的。 </p>
<p>SQL Server有三种不同的函数可以用来获得含有标识列的表里最后生成的标识值：</p>
<p>@@IDENTITY&nbsp;&nbsp; SCOPE_IDENTITY()&nbsp;&nbsp; IDENT_CURRENT('数据表名') 以上三个函数虽然都可以返回数据库引擎最后生成插入标识列的值，但是根据插入行的来源(例如：存储过程或触发器)以及插入该行的连接不同，这三个函数在功 能上也有所不同。</p>
<p>@@IDENTITY函数可以返回所有范围内当前连接插入最后所生成的标识值(包括任何调用的存储过程和触发器)。这个函数不止可以适用于表。函数 返回的值是最后表插入行生成的标识值。</p>
<p>SCOPE_IDENTITY()函数跟上一个函数几乎是一摸一样的，不同的地方：即前者返回的值只限于当前范围(即执行中的存储过程)。</p>
<p>最后是IDENT_CURRENT函数，它可以用于所有范围和所有连接，获得最后生成的表标识值。跟前面两个函数不同的是，这个函数只用于表，并且 使用[数据表名]作为一个参数。</p>
<p>我们可以举实例来演示上述函数是如何运作的。</p>
<p>首先，我们创建两个简单的例表：一个代表客户表，一个代表审计表。创建审计表的目的是为了跟踪数据库里插入和删除信息的所有记录。</p>
<p>以下是引用片段：</p>
<p>CREATE TABLE dbo.customer&nbsp;&nbsp; <br />(customerid INT IDENTITY(1,1) PRIMARY KEY)&nbsp;&nbsp; <br />GO&nbsp;&nbsp; <br />CREATE TABLE dbo.auditlog&nbsp;&nbsp; <br />(auditlogid INT IDENTITY(1,1) PRIMARY KEY,&nbsp;&nbsp; customerid INT, action CHAR(1),&nbsp;&nbsp; changedate datetime DEFAULT GETDATE())&nbsp;&nbsp; <br />GO <br />然后，我们还要创建一个存储过程和一个辅助 触发器，这个存储过程将在数据库表里插入新的客户行，并返回生成的标识值，而触发器则会向审计表插入行：</p>
<p>以下是引用片段：</p>
<p>CREATE PROCEDURE dbo.p_InsertCustomer <br />@customerid INT output&nbsp;&nbsp; <br />AS&nbsp;&nbsp; <br />SET nocount ON&nbsp;&nbsp; <br />INSERT INTO dbo.customer DEFAULT VALUES&nbsp; SELECT @customerid = @@identity&nbsp;&nbsp; <br />GO&nbsp;&nbsp; </p>
<p>CREATE TRIGGER dbo.tr_customer_log ON dbo.customer&nbsp;&nbsp; FOR INSERT, DELETE&nbsp;&nbsp; <br />AS&nbsp;&nbsp; <br />IF EXISTS (SELECT 'x' FROM inserted)&nbsp;&nbsp; INSERT INTO dbo.auditlog (customerid, action)&nbsp;&nbsp; SELECT customerid, 'I'&nbsp;&nbsp; FROM inserted ELSE&nbsp;&nbsp; IF EXISTS (SELECT 'x' FROM deleted)&nbsp;&nbsp; INSERT INTO dbo.auditlog (customerid, action)&nbsp;&nbsp; SELECT customerid, 'D'&nbsp;&nbsp; FROM deleted&nbsp;&nbsp; <br />GO <br />现在我们可以执行程序，创建客户表的第一行了，以下是引用片段：</p>
<p>DECLARE @customerid INT&nbsp;&nbsp; EXEC dbo.p_InsertCustomer @customerid output&nbsp;&nbsp; SELECT @customerid AS customerid </p>
<p>执行后返回了我们需要的第一个客户的值，并记录了插入审计表的条目。到目前为止，数据显示没有任何问题。</p>
<p>假设由于先前沟通出现了偏差，一个客户服务代表现在需要从数据库里删除掉这个新增的客户。我们现在就来把新插入的客户行删除掉：</p>
<p>以下是引用片段：</p>
<p>DELETE FROM dbo.customer WHERE customerid = 1 现在，客户工作表为空表，而审计工作表里则有两行&#8212;&#8212;第一行是记录第一次插入行，第二行是记录删除客户记录。</p>
<p>现在我们再往数据库里增加第二个客户信息并检测一下获得的标识值：</p>
<p>以下是引用片段：</p>
<p>DECLARE @customerid INT&nbsp;&nbsp; EXEC dbo.p_InsertCustomer @customerid output&nbsp;&nbsp; SELECT @customerid AS customerid </p>
<p>哇!看看出现了什么情况!如果我们现在再看客户工作表，就会发现虽然创建了客户2，但是我们的程序返回的标识值为3!到底出了什么问题呢?回想一 下，前面讲过@@IDENTITY函数的作用范围，它会返回主程序调用的任何存储过程或触动任何触发器最后生成的标识值，取决于哪一个在函数被调用前最后 生成标识值。在我们的例子里，初始范围是p_InsertCustomer，然后是触发器用来记录插入条目的tr_customer_log。因此我们返 回获得的标识值是审计工作表里触发器插入生成的标识值，而不是我们想要的客户工作表里的生成的标识值。</p>
<p>在SQL Server 2000之前的版本，@@IDENTITY函数是获得标识值的唯一方法。由于会出现这样的存储过程/触发器问题，SQL Server开发团队在SQL Server 2000中引入了 SCOPE_IDENTITY()和IDENT_CURRENT这两个函数来解决这个问题。所以在旧的SQL Server版本里，要解决这个问题比较麻烦。如果是SQL Server6.5版本，我建议可以去掉标识列，然后创建一个可以包含下一个需要使用的值的辅助表，可以达到标识列的作用效果。不过这个办法也不是什么高 明的办法。</p>
<p>现在我们来修改一下存储过程来使用SCOPE_IDENTITY()函数，并重新执行程序来添加第三个客户条目：</p>
<p>以下是引用片段：</p>
<p>ALTER PROCEDURE dbo.p_InsertCustomer @customerid INT output&nbsp;&nbsp; <br />AS&nbsp;&nbsp; <br />SET nocount ON&nbsp;&nbsp; <br />INSERT INTO dbo.customer DEFAULT VALUES&nbsp;&nbsp; SELECT @customerid = SCOPE_IDENTITY()&nbsp;&nbsp; <br />GO&nbsp;&nbsp; <br />DECLARE @customerid INT&nbsp;&nbsp; EXEC dbo.p_InsertCustomer @customerid output&nbsp;&nbsp; <br />SELECT @customerid AS customerid <br />我们返回的标识值还是3，不过这次我们获得的标识值是正确的，因为我们添加了第三个客户条 目。如果我们检查一下审计工作表，就会发现里面已经有第四个条目记录新插入的客户记录。由于函数SCOPE_IDENTITY()只作用于当前范围，只返 回当前执行程序的值，这样就避免了发生刚才那样的问题。</p>
<p>前面讲过，函数@@IDENTITY和函数SCOPE_IDENTITY()不止用于表，不像函数IDENT_CURRENT那样可以用表作为参 数。使用@@IDENTITY和SCOPE_IDENTITY()这两个函数的话在设置代码时需要加倍小心，才能够从所需要的表里获得正确的标识值。从表 面上来看，放弃这两个函数，只使用函数IDENT_CURRENT并指定表是更安全的办法。这样可以避免出现获得错误标识值的情况，对吧?记得先前说过函 数IDENT_CURRENT不仅会跨范围，而且它还会跨连接。也就是说，使用这个函数生成的值不仅仅限于你的连接所执行的程序，它的涵盖范围还包括整个 数据库所有的连接。因此，即使是在规模较小的OLTP环境里，它也会出现不能准确返回所需值的问题。这样就可能发生类似前面@@IDENTITY函数/触 发器的数据损坏问题。</p>
<p>我的建议是函数SCOPE_IDENTITY()是三个函数里最安全的函数，应该设置为默认函数。使用这个函数，你可以放心地添加触发器和次存储过 程，无需担心意外损坏数据。而另外两个函数可以保留应付特殊的情况，当遇到需要使用这两个函数的特殊情况时，建议记录它们的使用情况并进行测试。</p>
<p>小技巧：</p>
<p>Sql Server 判断表是存在标识列</p>
<p>If Exists(Select * from SysColumns Where ID=OBJECT_ID(N'TEST1') And COLUMNPROPERTY(ID,Name,'IsIdentity')=1)<br />Print N'有自增列'<br />Else<br />Print N'没有自增列'</p>
<p>Sql Server 显示当前数据库包含自增列的表<br />Select b.name,a.* from SysColumns a,sysobjects b Where a.id=b.id and COLUMNPROPERTY(a.ID,a.Name,'IsIdentity')=1</p>
<p>SQL SERVER自增长字段复位方法：</p>
<p>SQLSERVER 复位:</p>
<p>Truncate table Ashare_CJHB<br />Dbcc checkident (Ashare_CJHB,RESEED,0)</p>
<p>获取最后sql影响记录的最后ID,慎用@@Identity 我们常用的获sql影响的最后记录id常用的是@@identity，但有些情况下会有问题，其实sql一共提供了3个不同的方法</p>
<p>SELECT SCOPE_IDENTITY()</p>
<p>select IDENT_CURRENT(TableName)</p>
<p>select @@IDENTITY</p>
<p><br />IDENT_CURRENT 类似于 SQL Server 2000 标识函数 SCOPE_IDENTITY 和 @@IDENTITY。这三个函数都返回最后生成的标识值。但是，上述每个函数中定义的&#8220;最后&#8221;的作用域和会话有所不同。 </p>
<p>IDENT_CURRENT 返回为某个会话和用域中的指定表生成的最新标识值。</p>
<p>@@IDENTITY 返回为跨所有作用域的当前会话中的某个表生成的最新标识值。</p>
<p>SCOPE_IDENTITY 返回为当前会话和当前作用域中的某个表生成的最新标识值。</p>
<p>在空表中调用 IDENT_CURRENT 函数时，此函数将返回 NULL。</p>
<p>如果语句和事务失败，它们会更改表的当前标识，从而使标识列中的值出现不连贯现象。即使未提交试图向表中插入值的事务，也永远无法回滚标识值。例 如，如果因 IGNORE_DUP_KEY 冲突而导致 INSERT 语句失败，表的当前标识值仍然会增加。 </p>
<p>@@IDENTITY 表示插入后新的表示种子值，例子如下：<br />假如已经存在表job，向表插入一条数据，<br />INSERT INTO jobs (job_desc,min_lvl,max_lvl)<br />VALUES ('Accountant',12,125)<br />SELECT @@IDENTITY AS 'Identity'//获得表识值 </p></div></div></div><img src ="http://www.blogjava.net/DreamAngel/aggbug/377920.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/DreamAngel/" target="_blank">飞翔天使</a> 2012-05-11 16:20 <a href="http://www.blogjava.net/DreamAngel/archive/2012/05/11/377920.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用户权限管理设计</title><link>http://www.blogjava.net/DreamAngel/archive/2009/06/26/284337.html</link><dc:creator>飞翔天使</dc:creator><author>飞翔天使</author><pubDate>Fri, 26 Jun 2009 12:24:00 GMT</pubDate><guid>http://www.blogjava.net/DreamAngel/archive/2009/06/26/284337.html</guid><wfw:comment>http://www.blogjava.net/DreamAngel/comments/284337.html</wfw:comment><comments>http://www.blogjava.net/DreamAngel/archive/2009/06/26/284337.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/DreamAngel/comments/commentRss/284337.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/DreamAngel/services/trackbacks/284337.html</trackback:ping><description><![CDATA[<p>用户管理权限设计一直是大家讨论的热点，因为几乎涉及到每一个开发的业务系统。我找了很多很多的资料，大家的核心基本上都是一样的:基于角色管理. 用户，角色，模块，权限的相互组合，就可以形成一个强大的权限管理系统。</p>
<p>最近在一个项目中设计的一个用户权限的设计，很乐意与大家一起讨论及分享.</p>
<p>设计思路</p>
<p>我的设计思路或者说是我想要实现的功能</p>
<p>1.用户的权限通过角色来控制,一个用户可以拥有多个角色.</p>
<p>2.用户拥有不同角色时，其权限应该是多个角色相互的补集.</p>
<p>3.一个角色拥有多个模块</p>
<p>4.用户的前台菜单显示根据角色所拥有的模块所决定，不同的用户在前端显示的操作菜单是不一样的。</p>
<p>5.页面中的功能按钮根据模块中所包含的功能所定义，通过模块及角色所拥有的权限进行控制</p>
<p>6.可看某个模块有哪些用户，哪些对应角色,并对其进行特殊权限设置.</p>
<p>7.可以针对单个用户进行特殊设置</p>
<p>我在我的Project中，基本上达到了以上的效果及功能，但在实际过程中发现有些不足之处。因为整个权限设计是基于数据库来设计中，所以数据的读取当数据量大时（我所说的数据量是以万以上来计）可能对性能有一定的影响。但对于一般来说，几千用户之类的我想还是可以承受的。我会在后面说明不足之处。</p>
<p>数据库设计</p>
<p>基本设计：</p>
<p>1.首先,设计数据库.</p>
<p>数据库的设计其实我估计大家都很熟悉了</p>
<p>基本表：用户表，角色表，模块表，功能表,管理员表.如果涉及到企业性质的，可能会根据需要加上组织结构表，群组表等其它辅助表</p>
<p>用户</p>
<p><img height="251" alt="" src="http://www.blogjava.net/images/blogjava_net/dreamangel/sql/用户权限管理设计/01.jpg" width="567" border="0" /></p>
<p>&nbsp;</p>
<p>管理员</p>
<p><img height="210" alt="" src="http://www.blogjava.net/images/blogjava_net/dreamangel/sql/用户权限管理设计/02.jpg" width="567" border="0" /></p>
<p>角色</p>
<p><img height="109" alt="" src="http://www.blogjava.net/images/blogjava_net/dreamangel/sql/用户权限管理设计/03.jpg" width="331" border="0" /></p>
<p>模块</p>
<p>(我的模块表考虑了子模块的因素,所以会有深度，父模块ID这两个字段，在后来开发过中，由于思路的转变,IsRootModule,FunctionCode我都没有用到,为了让整个权限系统通变得更通用，我都将其单独设计成了另一个表）</p>
<p><img height="230" alt="" src="http://www.blogjava.net/images/blogjava_net/dreamangel/sql/用户权限管理设计/04.jpg" width="382" border="0" /></p>
<p>功能表（功能表就是模块对应的功能：增加，删除，修改，详细，列表，浏览，导出，导入之类的）<br />
<img height="163" alt="" src="http://www.blogjava.net/images/blogjava_net/dreamangel/sql/用户权限管理设计/05.jpg" width="285" border="0" /></p>
<p>业务表：用户-角色表 模块-功能表 角色-模块表</p>
<p>要实现一个用户多个角色(1 to n),一个角色多个模块(1 to n),一个模块多个功能(1 to n)，那就得加上几个相关的业务表，之前考虑用视图去实现，我个人之见,视图最好只用来读取数据，不要用来进行数据操作.后来证明是不可取的，这里要注意的就是在实际的业务操作中，应该尽量避免重复的数据录入. 这些表都很简单，但却很关键</p>
<p>用户-角色:<br />
<img height="185" alt="" src="http://www.blogjava.net/images/blogjava_net/dreamangel/sql/用户权限管理设计/06.jpg" width="592" border="0" /></p>
<p>角色-模块：</p>
<p><img height="160" alt="" src="http://www.blogjava.net/images/blogjava_net/dreamangel/sql/用户权限管理设计/07.jpg" width="302" border="0" /></p>
<p>模块-功能:</p>
<p><img height="157" alt="" src="http://www.blogjava.net/images/blogjava_net/dreamangel/sql/用户权限管理设计/09.jpg" width="307" border="0" /></p>
<p>大家可以看到，表结构很简单，字段也很少，设计也差不多。都是将相关联的字段ID取出来做数据存取。</p>
<p>视图：用户-角色-模块-功能视图<br />
<img height="54" alt="" src="http://www.blogjava.net/images/blogjava_net/dreamangel/sql/用户权限管理设计/08.jpg" width="209" border="0" /></p>
<p>&nbsp;</p>
<p>可能大家会觉得很奇怪，为什么这里出现member_role呢。因为我们在数据表中只存取了ID值，而对应的RoleName字段并没有包含其中，这里的视图就是获取关联表中其他所需要的字段数据了。另外两个视图大家看名字应该就知道他的用处了。</p>
<p>存储过程：各自表的增加，删除，修改，及列表数据. 判断是否存在相同的数据 <br />
（CUDLIS-Create, Update,Delete,IfExist,Show,List)</p>
<p>存储过程我就不一一列出了，很简单的，你只要写出下面这些基本上你在开发过程就不会有太多问题了. 注意的是：在相互关联的业务表中，最好能对数据插入进行重复数据判断（用户角色表，模块功能表，角色模块表，尽量避免重复的数据插入）我把大致需要实现的业务列个表给大家参考:</p>
<p>用户表:(Insert ,Update ,IfExist ,Show, Delete)</p>
<p>用户角色表:(Insert ,Update,IfExist,Delete,RoleListByUserID,UserListByRoleID)</p>
<p>角色表:(Insert,Update,IfExist,Show,Delete)</p>
<p>角色模块表:(Insert,IfExist,Delete,Show,RoleListByModuleID,ModulistByRoleID)</p>
<p>模块表:(Insert,Update,IfExist,Show,Dlete,ListByRootModuleID,ListByModuleLevel)</p>
<p>模块功能表:(Insert,Update,Delete,FunctionListByModuleID)</p>
<p>针对用户直接获取其所有的权限时，应该有个单独的Procedure从视图中Member_Role_Module_Function中获取其对应的数据，这样就可以得到想要的东西了。</p>
<p>数据库设计部分应该就这样差不多了。我想这应该是通用的。在实际运用过程中，我个人认为应该有一些改进点：</p>
<p>1.模块与功能部分，可以用字符串的形式将模块对应的功能存在一个数据字段中，这样可能在你的代码编写中可以省下较多的时间并带来更多的便利（主要是可以用split()来代替频繁的数据获取业务）这个我在最初设计中没有想到这点，有点失策.</p>
<p>2.针对N级模块的权限展现问题，如何让父模块继承子模块的权限这个是我没有考虑到的，不过我想应该可以用IsRootModule这个字段来作文章，可惜我还没想到如何去整这个字段。当子模块很多时，在前端UI展示的时候是否会出现很慢的情况？这个我没有去做测试，带有一定的风险。<br />
但在前端UI展示我还没想到或实现好的办法，我能想到的应该是像GridViewTree那种不错。</p>
<p>这个权限设计已经在我的Project中运用，暂时没有发现什么问题，而且为我以后对其它系统集成也很有帮助。至于如何在C#中实现业务，个人认为只要知道数据库如何整的，那C#中的业务实现只是一个取数操作过程。</p>
<img src ="http://www.blogjava.net/DreamAngel/aggbug/284337.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/DreamAngel/" target="_blank">飞翔天使</a> 2009-06-26 20:24 <a href="http://www.blogjava.net/DreamAngel/archive/2009/06/26/284337.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sqlserver 数据库区分大小写设置</title><link>http://www.blogjava.net/DreamAngel/archive/2009/05/12/270154.html</link><dc:creator>飞翔天使</dc:creator><author>飞翔天使</author><pubDate>Tue, 12 May 2009 02:29:00 GMT</pubDate><guid>http://www.blogjava.net/DreamAngel/archive/2009/05/12/270154.html</guid><wfw:comment>http://www.blogjava.net/DreamAngel/comments/270154.html</wfw:comment><comments>http://www.blogjava.net/DreamAngel/archive/2009/05/12/270154.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/DreamAngel/comments/commentRss/270154.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/DreamAngel/services/trackbacks/270154.html</trackback:ping><description><![CDATA[SQL SERVER 2000/2005中默认不区分大小写，可以通过collate Chinese_PRC_CS_AS来要求区分大小写，可以通过collate Chinese_PRC_CI_AS恢复默认的不区分大小写。<br />
<br />
默认情况下，SQL Server不区分大小写，如果数据表TEST的TNAME列中有数据&#8220;abcd&#8221;和&#8220;Abcd&#8221;， 如果使用查询语句：select * from test&nbsp; where&nbsp; tname&nbsp; like 'a%'，则查询的结果会把上面的两条记录都查询出来，这一点上和Oracle有区别。<br />
<br />
可以通过设置排序规使其区分大小写，可以分别在创建数据库、修改数据库、创建表的字符型列（char\varchar\nchar\nvarchar等）时指定排序规则来实现。如 <br />
<br />
create database test&nbsp; COLLATE&nbsp; Chinese_PRC_CS_AS&nbsp;&nbsp; --这样创建的数据库中区分大小写 <br />
<br />
alter database test&nbsp; COLLATE&nbsp; Chinese_PRC_CS_AS&nbsp;&nbsp; --修改后的数据库中区分大小写 <br />
<br />
Create table test(tid int primary key,tname varchar(20) collate chines_prc_cs_as) --这样创建的tname列在使用SELECT 语句时就可以区分大小写了。
 <img src ="http://www.blogjava.net/DreamAngel/aggbug/270154.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/DreamAngel/" target="_blank">飞翔天使</a> 2009-05-12 10:29 <a href="http://www.blogjava.net/DreamAngel/archive/2009/05/12/270154.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ODBC配置SQL Server</title><link>http://www.blogjava.net/DreamAngel/archive/2009/03/27/262459.html</link><dc:creator>飞翔天使</dc:creator><author>飞翔天使</author><pubDate>Fri, 27 Mar 2009 08:42:00 GMT</pubDate><guid>http://www.blogjava.net/DreamAngel/archive/2009/03/27/262459.html</guid><wfw:comment>http://www.blogjava.net/DreamAngel/comments/262459.html</wfw:comment><comments>http://www.blogjava.net/DreamAngel/archive/2009/03/27/262459.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/DreamAngel/comments/commentRss/262459.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/DreamAngel/services/trackbacks/262459.html</trackback:ping><description><![CDATA[&nbsp;
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1．<span style="font: 7pt 'Times New Roman'">&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">按如下步骤依次打开控制面板</span><span lang="EN-US">-&gt;</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">性能维护</span><span lang="EN-US">-&gt;</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">管理工具</span><span lang="EN-US">-&gt;</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据源（</span><span lang="EN-US">ODBC</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。</span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2．<span style="font: 7pt 'Times New Roman'">&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选中系统</span><span lang="EN-US">DSN</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选项卡，如图所示</span></p>
<p class="MsoNormal" style="text-indent: 15.75pt; mso-char-indent-count: 1.5"><span lang="EN-US"><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><img height="380" alt="" src="http://www.blogjava.net/images/blogjava_net/dreamangel/odbc/odbc1.jpg" width="461" border="0" /></span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">3．<span style="font: 7pt 'Times New Roman'">&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">点击&#8220;添加&#8220;按钮，在弹出的对话框中选择&#8220;</span><span lang="EN-US">SQL Server</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;，单击&#8220;完成&#8221;。</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><img height="347" alt="" src="http://www.blogjava.net/images/blogjava_net/dreamangel/odbc/odbc2.jpg" width="468" border="0" /></span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">4．<span style="font: 7pt 'Times New Roman'">&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在&#8220;名称&#8221;和&#8220;服务器&#8221;中输入相应的数据，其中&#8220;服务器&#8221;名应为计算机的名字，如图所示，单击&#8220;下一步&#8221;。</span></p>
<p class="MsoNormal" style="margin-left: 18pt"><span lang="EN-US"><img height="356" alt="" src="http://www.blogjava.net/images/blogjava_net/dreamangel/odbc/odbc3.jpg" width="510" border="0" /></span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">5．<span style="font: 7pt 'Times New Roman'">&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选择&#8220;用户输入登陆</span><span lang="EN-US">ID</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和密码的</span><span lang="EN-US">SQL Server</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">验证&#8221;，把&#8220;登陆</span><span lang="EN-US">ID</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;（一般为</span><span lang="EN-US">sa</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）和&#8220;密码&#8221;改为你所设置的信息，取消</span> <span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8220;连接</span><span lang="EN-US">SQL Server</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以获得其它配置选项的默认设置&#8221;的选中，单击&#8220;下一步&#8221;。</span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US"><img height="356" alt="" src="http://www.blogjava.net/images/blogjava_net/dreamangel/odbc/odbc4.jpg" width="510" border="0" /></span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">6．<span style="font: 7pt 'Times New Roman'">&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选择合适的数据库，单击&#8220;下一步&#8221;。</span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US"><img height="356" alt="" src="http://www.blogjava.net/images/blogjava_net/dreamangel/odbc/odbc5.jpg" width="510" border="0" /></span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">7．<span style="font: 7pt 'Times New Roman'">&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">单击&#8220;完成&#8221;。</span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">8．<span style="font: 7pt 'Times New Roman'">&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在弹出的对话框中单击&#8220;测试数据源&#8221;，如果连接正确则显示&#8220;测试成功&#8221;，如图所示。</span><span lang="EN-US"><img height="359" alt="" src="http://www.blogjava.net/images/blogjava_net/dreamangel/odbc/odbc6.jpg" width="368" border="0" /><span style="mso-spacerun: yes">&nbsp;<br />
</span><img alt="" src="http://www.blogjava.net/images/blogjava_net/dreamangel/odbc/odbc7.jpg" border="0" /></span></p>
<img src ="http://www.blogjava.net/DreamAngel/aggbug/262459.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/DreamAngel/" target="_blank">飞翔天使</a> 2009-03-27 16:42 <a href="http://www.blogjava.net/DreamAngel/archive/2009/03/27/262459.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>泰讯软件数据库笔试题目(SQL Server 2000版)</title><link>http://www.blogjava.net/DreamAngel/archive/2009/03/16/260026.html</link><dc:creator>飞翔天使</dc:creator><author>飞翔天使</author><pubDate>Mon, 16 Mar 2009 07:02:00 GMT</pubDate><guid>http://www.blogjava.net/DreamAngel/archive/2009/03/16/260026.html</guid><wfw:comment>http://www.blogjava.net/DreamAngel/comments/260026.html</wfw:comment><comments>http://www.blogjava.net/DreamAngel/archive/2009/03/16/260026.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/DreamAngel/comments/commentRss/260026.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/DreamAngel/services/trackbacks/260026.html</trackback:ping><description><![CDATA[&nbsp;
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据库中存在两张表：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #008080">--</span><span style="color: #008080">职工表</span><span style="color: #008080"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #008080"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">CREATE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">dbo</span><span style="color: #ff0000">]</span><span style="color: #000000">.</span><span style="color: #ff0000">[</span><span style="color: #ff0000">emp</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;(<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">empid</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">int</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">IDENTITY</span><span style="color: #000000">&nbsp;(</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">,&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">NOT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">&nbsp;,<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">empname</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">char</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;(</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">)&nbsp;COLLATE&nbsp;Chinese_PRC_CI_AS&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">&nbsp;,<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">comm</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">int</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">&nbsp;,<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">deptno</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">int</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />)&nbsp;</span><span style="color: #0000ff">ON</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">PRIMARY</span><span style="color: #ff0000">]</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008080">--</span><span style="color: #008080">部门表</span><span style="color: #008080"><br />
</span><span style="color: #008080">10</span><span style="color: #008080"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">CREATE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">dbo</span><span style="color: #ff0000">]</span><span style="color: #000000">.</span><span style="color: #ff0000">[</span><span style="color: #ff0000">dept</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;(<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">deptno</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">int</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">IDENTITY</span><span style="color: #000000">&nbsp;(</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">,&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">NOT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">&nbsp;,<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">deptname</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">char</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;(</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">)&nbsp;COLLATE&nbsp;Chinese_PRC_CI_AS&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />)&nbsp;</span><span style="color: #0000ff">ON</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">PRIMARY</span><span style="color: #ff0000">]</span></div>
<p class="MsoNormal"></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">回答以下问题：</span></p>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">取出</span><span lang="EN-US">emp</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表中</span><span lang="EN-US">comm</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">最小的所有记录。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;emp&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;comm</span><span style="color: #808080">=</span><span style="color: #000000">(</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">min</span><span style="color: #000000">(comm)&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;emp)</span></div>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"></span></p>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">显示所有职工的</span><span lang="EN-US">empname</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以及其对应的</span><span lang="EN-US">deptname</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">；如果</span><span lang="EN-US">emp</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表中的</span><span lang="EN-US">deptno</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span><span lang="EN-US">dept</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表中找不到，则</span><span lang="EN-US">deptname</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">输出为空。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;e.empname,d.deptname&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;emp&nbsp;e&nbsp;</span><span style="color: #ff00ff">left</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">join</span><span style="color: #000000">&nbsp;dept&nbsp;d&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;e.deptno</span><span style="color: #808080">=</span><span style="color: #000000">d.deptno</span></div>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"></span></p>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">3.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">把</span><span lang="EN-US">emp</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表中的所有</span><span lang="EN-US">comm</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设置为</span><span lang="EN-US">comm=comm.+100;</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果</span><span lang="EN-US">comm</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</span><span lang="EN-US">null</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则</span><span lang="EN-US">comm=1</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">update</span><span style="color: #000000">&nbsp;emp&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;comm</span><span style="color: #808080">=</span><span style="color: #ff00ff">case</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">when</span><span style="color: #000000">&nbsp;comm&nbsp;</span><span style="color: #0000ff">is</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">not</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">then</span><span style="color: #000000">&nbsp;comm</span><span style="color: #808080">+</span><span style="font-weight: bold; color: #800000">100</span><span style="color: #000000"><br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">when</span><span style="color: #000000">&nbsp;comm&nbsp;</span><span style="color: #0000ff">is</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">then</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000"><br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">end</span></div>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"></span></p>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">4.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">写一个存储过程，复制表</span><span lang="EN-US">emp</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的所有记录到</span><span lang="EN-US">emp</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表的末尾（其中</span><span lang="EN-US">empid</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">自动增</span><span lang="EN-US">1</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），要有抛出异常的处理。</p>
</span>
 <img src ="http://www.blogjava.net/DreamAngel/aggbug/260026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/DreamAngel/" target="_blank">飞翔天使</a> 2009-03-16 15:02 <a href="http://www.blogjava.net/DreamAngel/archive/2009/03/16/260026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection while in manual transaction mode.解决办法</title><link>http://www.blogjava.net/DreamAngel/archive/2009/02/02/252916.html</link><dc:creator>飞翔天使</dc:creator><author>飞翔天使</author><pubDate>Mon, 02 Feb 2009 02:30:00 GMT</pubDate><guid>http://www.blogjava.net/DreamAngel/archive/2009/02/02/252916.html</guid><wfw:comment>http://www.blogjava.net/DreamAngel/comments/252916.html</wfw:comment><comments>http://www.blogjava.net/DreamAngel/archive/2009/02/02/252916.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/DreamAngel/comments/commentRss/252916.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/DreamAngel/services/trackbacks/252916.html</trackback:ping><description><![CDATA[&nbsp;
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">错误情况：</span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US">java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection while in manual transaction mode.</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">错误原因：</span></p>
<p class="MsoNormal" style="margin-left: 42pt; text-indent: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 42.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当你在一个</span><span lang="EN-US">SQL SERVER</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US">JDBC</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">连接上执行多个</span><span lang="EN-US">STATEMENTS</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的操作。</span></p>
<p class="MsoNormal" style="margin-left: 42pt; text-indent: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 42.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">手动事务状态（</span><span lang="EN-US">AutoCommit=false)</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，并且使用</span><span lang="EN-US"> direct (SelectMethod=direct) </span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解决方法：</span></p>
<p class="MsoNormal" style="margin-left: 42pt; text-indent: -21pt; mso-list: l1 level1 lfo2; tab-stops: list 42.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">确保在你的连接上只有一个</span><span lang="EN-US">STATEMENT</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">操作。</span></p>
<p class="MsoNormal" style="margin-left: 42pt; text-indent: -21pt; mso-list: l1 level1 lfo2; tab-stops: list 42.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用手动事务模式时，必须在连接字符串中加上</span><span lang="EN-US">SelectMethod=Cursor</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。例如：</span><span lang="EN-US">jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=RMS_Pro;SelectMethod=Cursor;User=sa;Password= ");</span></p>
<img src ="http://www.blogjava.net/DreamAngel/aggbug/252916.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/DreamAngel/" target="_blank">飞翔天使</a> 2009-02-02 10:30 <a href="http://www.blogjava.net/DreamAngel/archive/2009/02/02/252916.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>