??xml version="1.0" encoding="utf-8" standalone="yes"?>国产成A人亚洲精V品无码性色,亚洲一区二区三区四区视频,日日摸日日碰夜夜爽亚洲http://www.tkk7.com/DreamAngel/category/37382.html如果你希望成功,以恒心ؓ良友Q以l验为参谋,以小心ؓ兄弟Q以希望为哨c?/description>zh-cnSun, 22 Sep 2013 20:05:16 GMTSun, 22 Sep 2013 20:05:16 GMT60win7下sql2005安装配置常见问题http://www.tkk7.com/DreamAngel/archive/2013/09/21/404271.html飞翔天飞翔天Sat, 21 Sep 2013 12:21:00 GMThttp://www.tkk7.com/DreamAngel/archive/2013/09/21/404271.htmlhttp://www.tkk7.com/DreamAngel/comments/404271.htmlhttp://www.tkk7.com/DreamAngel/archive/2013/09/21/404271.html#Feedback0http://www.tkk7.com/DreamAngel/comments/commentRss/404271.htmlhttp://www.tkk7.com/DreamAngel/services/trackbacks/404271.htmlwin7下sql2005安装提示iis功能和com+目录要求的解?br />iis功能 : win7下,iis目?“万维|服?#8221;中有目没有N?br />到控刉板,打开IIS FeaturesQ点左边的加P打开详细信息Q复选上以下lgQ?

1: Web Managerment Tools\IIS 6 Management Compatibility\IIS6 WMI Compatibility
2: Web Managerment Tools\IIS 6 Management Compatibility\IIS6 Metabase and IIS 6 Configuration Compatibility
3: World Wide Web Services\Application Development Features\Asp.net
4: World Wide Web Services\Common Http Features\Http Redirection
5: World Wide Web Services\Security\Windows Authentication

com+目录需求:Com+ System Application服务未启动,其依赖项System Event Notification Service 服务被禁用,手动启动又报??nbsp;

解决Q?/p>

开?>q行->输入”services.msc”Q我看了看COM+的相x务,差COM+ System Applycationq项服务没开Q提C?068错误Q依赖的服务没启动!Q!右键COM+ System Application->属?>依存关系QSystem Event Notification Service 服务被禁用,手动启动又报错。找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\COMSysAppQ看C一个项”DependOnService”Q打开看了下,依存的服务有三项

“RpcSs
EventSystem
SENS

在命令行Q?br />sc start RpcSs
依次开启每个服?可以跌前两?

sc start SENSQ提C服务被用Q?服务可能没有昄)Q再用命令行Q用下列命oSENSq个服务设成了手?br />sc config sens start= demand
注意=号后面有I格Q?br />sc start COMSysApp
成功Q回到SQL 2005安装Q安装不提示“COM+ 目录要求警告”了,安装q程也没有开的“无法?COM+ 目录配置。。?#8221;的问题了Q?br />C:\Users\vovi>sc getdisplayname sens
[SC] GetServiceDisplayName 成功
名称 = System Event Notification Service


打开sql server 2005 ?433端口
W一U方法:
打开SQL Server 配置理器,展开SQL Server 2005/2008|络配置节点Q展开协议节点Q在协议双启用TCP/IP协议Q在其中的TCP/IP协议属性中Q在IPAllq一,TCP端口讄?433Q重新启动SQL ServerQ如果防火墙没限Ӟ现在OK了?br />

W二U方法:
配置工具—>SQL Server外围应用配置?#8212;>服务和连接的外围应用配置?#8212;>Datebase Engine—>q程q接—>选择【本地连接和q程q接?#8212;>选择【同时用TCP/IP和named pipes?#8212;>点击应用定—>断开SQL Server 2005q接Q重新连接SQL Server 2005 —>停止服务—>启动服务?img height="378" alt="" src="http://www.tkk7.com/images/blogjava_net/dreamangel/sql/1433-2.png" width="500" border="0" />



飞翔天 2013-09-21 20:21 发表评论
]]>
SQL Server中如何取得刚插入的标识?/title><link>http://www.tkk7.com/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.tkk7.com/DreamAngel/archive/2012/05/11/377920.html</guid><wfw:comment>http://www.tkk7.com/DreamAngel/comments/377920.html</wfw:comment><comments>http://www.tkk7.com/DreamAngel/archive/2012/05/11/377920.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/DreamAngel/comments/commentRss/377920.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/DreamAngel/services/trackbacks/377920.html</trackback:ping><description><![CDATA[<div class="zbldvz3" id="cnblogs_post_body"> <div> <div fc05="" fc11="" nbw-blog="" ztag="" js-fs2=""> <p>数据库实际应用中Q我们往往需要得到刚刚插?的标志值来往相关表中写入数据。但我们q_得到的真的是我们需要的那个gQ?br />有时我们会?SELECT @@Identity 来获得我们刚刚插入的|比如下面的代?/p> <p>代码一Q?/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"> tempdb<br /></span><span style="color: #0000ff">if</span><span style="color: #000000"> </span><span style="color: #808080">exists</span><span style="color: #000000"> (</span><span style="color: #0000ff">select</span><span style="color: #000000"> </span><span style="color: #808080">*</span><span style="color: #000000"> </span><span style="color: #0000ff">from</span><span style="color: #000000"> sys.objects </span><span style="color: #0000ff">where</span><span style="color: #000000"> </span><span style="color: #ff00ff">object_id</span><span style="color: #000000"> </span><span style="color: #808080">=</span><span style="color: #000000"> </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">) </span><span style="color: #808080">and</span><span style="color: #000000"> type </span><span style="color: #808080">in</span><span style="color: #000000"> (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"> </span><span style="color: #0000ff">table</span><span style="color: #000000"> </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"> </span><span style="color: #0000ff">table</span><span style="color: #000000"> test1<br />(<br />id </span><span style="color: #000000; font-weight: bold">int</span><span style="color: #000000"> </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 </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"> </span><span style="color: #0000ff">into</span><span style="color: #000000"> test1 (content) </span><span style="color: #0000ff">values</span><span style="color: #000000"> (</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"> </span><span style="color: #008000; font-weight: bold">@@identity</span></div> <p>乐观情况下,q样做是没问题的Q但如果我们如果先运行下面的代码二创Z个触发器、再q行代码三:</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"> </span><span style="color: #0000ff">table</span><span style="color: #000000"> test2<br />(<br />id </span><span style="color: #000000; font-weight: bold">int</span><span style="color: #000000"> </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 </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"> </span><span style="color: #0000ff">trigger</span><span style="color: #000000"> tri_test1_identitytest_I<br /></span><span style="color: #0000ff">on</span><span style="color: #000000"> test1 after </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"> </span><span style="color: #0000ff">into</span><span style="color: #000000"> test2 <br /></span><span style="color: #0000ff">select</span><span style="color: #000000"> content </span><span style="color: #0000ff">from</span><span style="color: #000000"> 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"> </span><span style="color: #0000ff">into</span><span style="color: #000000"> test1 (content) </span><span style="color: #0000ff">values</span><span style="color: #000000"> (</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"> </span><span style="color: #008000; font-weight: bold">@@identity</span></div> <p> <br />我们可以看到Q此时得到的标识值已l是100多了Q很明显Q这是表test2的生成的标识|已经不是我们惌?了?br />我们可以看看@@identity的定义:Identity<br />原来Q@@identityq回的是当前事务最后插入的标识倹{?br />q?时我们或怼用下面的ҎQ?/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"> </span><span style="color: #0000ff">into</span><span style="color: #000000"> test1 (content) </span><span style="color: #0000ff">values</span><span style="color: #000000"> (</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"> 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>看来l果q比较正,但如果我们在多次q行代码四的同时q行下面的代码五Q?/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"> </span><span style="color: #0000ff">into</span><span style="color: #000000"> test1 (content) </span><span style="color: #0000ff">values</span><span style="color: #000000"> (</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"> delay </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"> 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> <br />l果?不是我们惌的了Q?br />再看看IDENT_CURRENT(Tablename) 的定义:IDENT_CURRENT(Tablename)<br />?q回指定表的最后标识倹{?/p> <p>到这里,是该亮出{案的时候了Q我们可以用下面的代码Q?/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"> </span><span style="color: #0000ff">into</span><span style="color: #000000"> test1 (content) </span><span style="color: #0000ff">values</span><span style="color: #000000"> (</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"> </span><span style="color: #ff00ff">scope_identity</span><span style="color: #000000">()</span></div> <p>q时Q我们无论是d触发器还是运行ƈ行插入,得到的始l是当前事务的标识倹{?/p> <p>scope_identity()的定义:scope_identity()<br /> </p> <p> </p> <p><br />Table表中有一字段增长?也称标识列,即Identity Increment)Q那么如何获取该列的下一行标识值呢Q或刚插入的标识|<br /> </p> <p>l过一番探索,下面的代码有效:</p> <p>--获取刚插入的标识?/p> <p>SELECT IDENT_CURRENT('TableName') from TableName<br /> </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>   set @NextIdentity = IDENT_SEED('TableName')  --如查询表为空Q则取标识列起始?/p> <p><br />TableName换成所需计算的表名即可?/p> <p> </p> <p>摘要Q本文向您介l如何在SQL Server中准的获得标识|在SQL Server中,有三U不同的函数可以帮助我们辑ֈ目的?</p> <p>SQL Server有三U不同的函数可以用来获得含有标识列的表里最后生成的标识|</p> <p>@@IDENTITY   SCOPE_IDENTITY()   IDENT_CURRENT('数据表名') 以上三个函数虽然都可以返回数据库引擎最后生成插入标识列的|但是Ҏ插入行的来源(例如Q存储过E或触发?以及插入该行的连接不同,q三个函数在?能上也有所不同?/p> <p>@@IDENTITY函数可以q回所有范围内当前q接插入最后所生成的标识?包括M调用的存储过E和触发?。这个函C止可以适用于表。函?q回的值是最后表插入行生成的标识倹{?/p> <p>SCOPE_IDENTITY()函数跟上一个函数几乎是一怸LQ不同的地方Q即前者返回的值只限于当前范围(x行中的存储过E??/p> <p>最后是IDENT_CURRENT函数Q它可以用于所有范围和所有连接,获得最后生成的表标识倹{跟前面两个函数不同的是Q这个函数只用于表,q且 使用[数据表名]作ؓ一个参数?/p> <p>我们可以丑֮例来演示上述函数是如何运作的?/p> <p>首先Q我们创Z个简单的例表Q一个代表客戯Q一个代表审计表。创建审计表的目的是Z跟踪数据库里插入和删除信息的所有记录?/p> <p>以下是引用片D:</p> <p>CREATE TABLE dbo.customer   <br />(customerid INT IDENTITY(1,1) PRIMARY KEY)   <br />GO   <br />CREATE TABLE dbo.auditlog   <br />(auditlogid INT IDENTITY(1,1) PRIMARY KEY,   customerid INT, action CHAR(1),   changedate datetime DEFAULT GETDATE())   <br />GO <br />然后Q我们还要创Z个存储过E和一个辅?触发器,q个存储q程在数据库表里插入新的客戯Qƈq回生成的标识|而触发器则会向审计表插入行:</p> <p>以下是引用片D:</p> <p>CREATE PROCEDURE dbo.p_InsertCustomer <br />@customerid INT output   <br />AS   <br />SET nocount ON   <br />INSERT INTO dbo.customer DEFAULT VALUES  SELECT @customerid = @@identity   <br />GO   </p> <p>CREATE TRIGGER dbo.tr_customer_log ON dbo.customer   FOR INSERT, DELETE   <br />AS   <br />IF EXISTS (SELECT 'x' FROM inserted)   INSERT INTO dbo.auditlog (customerid, action)   SELECT customerid, 'I'   FROM inserted ELSE   IF EXISTS (SELECT 'x' FROM deleted)   INSERT INTO dbo.auditlog (customerid, action)   SELECT customerid, 'D'   FROM deleted   <br />GO <br />现在我们可以执行E序Q创建客戯的第一行了Q以下是引用片段Q?/p> <p>DECLARE @customerid INT   EXEC dbo.p_InsertCustomer @customerid output   SELECT @customerid AS customerid </p> <p>执行后返回了我们需要的W一个客L|q记录了插入审计表的条目。到目前为止Q数据显C没有Q何问题?/p> <p>假设׃先前沟通出C偏差Q一个客h务代表现在需要从数据库里删除掉这个新增的客户。我们现在就来把新插入的客户行删除掉Q?/p> <p>以下是引用片D:</p> <p>DELETE FROM dbo.customer WHERE customerid = 1 现在Q客户工作表为空表,而审计工作表里则有两?#8212;—W一行是记录W一ơ插入行Q第二行是记录删除客戯录?/p> <p>现在我们再往数据库里增加W二个客户信息ƈ一下获得的标识|</p> <p>以下是引用片D:</p> <p>DECLARE @customerid INT   EXEC dbo.p_InsertCustomer @customerid output   SELECT @customerid AS customerid </p> <p>?看看出现了什么情?如果我们现在再看客户工作表,׃发现虽然创徏了客?Q但是我们的E序q回的标识gؓ3!到底Z什么问题呢?回想一 下,前面讲过@@IDENTITY函数的作用范_它会q回ȝ序调用的M存储q程或触动Q何触发器最后生成的标识|取决于哪一个在函数被调用前最?生成标识倹{在我们的例子里Q初始范围是p_InsertCustomerQ然后是触发器用来记录插入条目的tr_customer_log。因此我们返 回获得的标识值是审计工作表里触发器插入生成的标识|而不是我们想要的客户工作表里的生成的标识倹{?/p> <p>在SQL Server 2000之前的版本,@@IDENTITY函数是获得标识值的唯一Ҏ。由于会出现q样的存储过E?触发器问题,SQL Server开发团队在SQL Server 2000中引入了 SCOPE_IDENTITY()和IDENT_CURRENTq两个函数来解决q个问题。所以在旧的SQL Server版本里,要解册个问题比较麻烦。如果是SQL Server6.5版本Q我可以L标识列,然后创徏一个可以包含下一个需要用的值的辅助表,可以辑ֈ标识列的作用效果。不q这个办法也不是什么高 明的办法?/p> <p>现在我们来修改一下存储过E来使用SCOPE_IDENTITY()函数Qƈ重新执行E序来添加第三个客户条目Q?/p> <p>以下是引用片D:</p> <p>ALTER PROCEDURE dbo.p_InsertCustomer @customerid INT output   <br />AS   <br />SET nocount ON   <br />INSERT INTO dbo.customer DEFAULT VALUES   SELECT @customerid = SCOPE_IDENTITY()   <br />GO   <br />DECLARE @customerid INT   EXEC dbo.p_InsertCustomer @customerid output   <br />SELECT @customerid AS customerid <br />我们q回的标识D?Q不q这ơ我们获得的标识值是正确的,因ؓ我们d了第三个客户?目。如果我们检查一下审计工作表Q就会发现里面已l有W四个条目记录新插入的客戯录。由于函数SCOPE_IDENTITY()只作用于当前范围Q只q?回当前执行程序的|q样避免了发生刚才那样的问题?/p> <p>前面讲过Q函数@@IDENTITY和函数SCOPE_IDENTITY()不止用于表,不像函数IDENT_CURRENT那样可以用表作ؓ?数。用@@IDENTITY和SCOPE_IDENTITY()q两个函数的话在讄代码旉要加倍小心,才能够从所需要的表里获得正确的标识倹{从?面上来看Q放弃这两个函数Q只使用函数IDENT_CURRENTq指定表是更安全的办法。这样可以避免出现获得错误标识值的情况Q对?记得先前说过?数IDENT_CURRENT不仅会跨范围Q而且它还会跨q接。也是_使用q个函数生成的g仅仅限于你的q接所执行的程序,它的늛范围q包括整?数据库所有的q接。因此,即是在规模较小的OLTP环境里,它也会出C能准返回所需值的问题。这样就可能发生cM前面@@IDENTITY函数/?发器的数据损坏问题?/p> <p>我的是函数SCOPE_IDENTITY()是三个函数里最安全的函敎ͼ应该讄为默认函数。用这个函敎ͼ你可以放心地d触发器和ơ存储过 E,无需担心意外损坏数据。而另外两个函数可以保留应付特D的情况Q当遇到需要用这两个函数的特D情冉|Q徏议记录它们的使用情况q进行测试?/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自增长字D复位方法:</p> <p>SQLSERVER 复位:</p> <p>Truncate table Ashare_CJHB<br />Dbcc checkident (Ashare_CJHB,RESEED,0)</p> <p>获取最后sql影响记录的最后ID,慎用@@Identity 我们常用的获sql影响的最后记录id常用的是@@identityQ但有些情况下会有问题,其实sql一共提供了3个不同的Ҏ</p> <p>SELECT SCOPE_IDENTITY()</p> <p>select IDENT_CURRENT(TableName)</p> <p>select @@IDENTITY</p> <p><br />IDENT_CURRENT cM?SQL Server 2000 标识函数 SCOPE_IDENTITY ?@@IDENTITY。这三个函数都返回最后生成的标识倹{但是,上述每个函数中定义的“最?#8221;的作用域和会话有所不同?</p> <p>IDENT_CURRENT q回为某个会话和用域中的指定表生成的最新标识倹{?/p> <p>@@IDENTITY q回所有作用域的当前会话中的某个表生成的最新标识倹{?/p> <p>SCOPE_IDENTITY q回为当前会话和当前作用域中的某个表生成的最新标识倹{?/p> <p>在空表中调用 IDENT_CURRENT 函数Ӟ此函数将q回 NULL?/p> <p>如果语句和事务失败,它们会更改表的当前标识,从而标识列中的值出Cq诏现象。即使未提交试图向表中插入值的事务Q也永远无法回滚标识倹{例 如,如果?IGNORE_DUP_KEY 冲突而导?INSERT 语句p|Q表的当前标识g然会增加?</p> <p>@@IDENTITY 表示插入后新的表C种子|例子如下Q?br />假如已经存在表jobQ向表插入一条数据,<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.tkk7.com/DreamAngel/aggbug/377920.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/DreamAngel/" target="_blank">飞翔天</a> 2012-05-11 16:20 <a href="http://www.tkk7.com/DreamAngel/archive/2012/05/11/377920.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用户权限理设计http://www.tkk7.com/DreamAngel/archive/2009/06/26/284337.html飞翔天飞翔天Fri, 26 Jun 2009 12:24:00 GMThttp://www.tkk7.com/DreamAngel/archive/2009/06/26/284337.htmlhttp://www.tkk7.com/DreamAngel/comments/284337.htmlhttp://www.tkk7.com/DreamAngel/archive/2009/06/26/284337.html#Feedback6http://www.tkk7.com/DreamAngel/comments/commentRss/284337.htmlhttp://www.tkk7.com/DreamAngel/services/trackbacks/284337.html用户理权限设计一直是大家讨论的热点,因ؓ几乎涉及到每一个开发的业务pȝ。我找了很多很多的资料,大家的核心基本上都是一L:Z角色理. 用户Q角Ԍ模块Q权限的怺l合Q就可以形成一个强大的权限理pȝ?/p>

最q在一个项目中设计的一个用h限的设计Q很乐意与大家一赯论及分n.

设计思\

我的设计思\或者说是我惌实现的功?/p>

1.用户的权限通过角色来控?一个用户可以拥有多个角?

2.用户拥有不同角色Ӟ其权限应该是多个角色怺的补?

3.一个角色拥有多个模?/p>

4.用户的前台菜单显C根据角色所拥有的模块所军_Q不同的用户在前端显C的操作菜单是不一L?/p>

5.面中的功能按钮Ҏ模块中所包含的功能所定义Q通过模块及角色所拥有的权限进行控?/p>

6.可看某个模块有哪些用P哪些对应角色,q对其进行特D权限设|?

7.可以针对单个用户q行Ҏ讄

我在我的Project中,基本上达C以上的效果及功能Q但在实际过E中发现有些不之处。因为整个权限设计是Z数据库来设计中,所以数据的d当数据量大时Q我所说的数据量是以万以上来计Q可能对性能有一定的影响。但对于一般来_几千用户之类的我惌是可以承受的。我会在后面说明不之处?/p>

数据库设?/p>

基本设计Q?/p>

1.首先,设计数据?

数据库的设计其实我估计大安很熟悉了

基本表:用户表,角色表,模块表,功能?理员表.如果涉及C业性质的,可能会根据需要加上组l结构表Q群l表{其它辅助表

用户

 

理?/p>

角色

模块

(我的模块表考虑了子模块的因?所以会有深度,父模块IDq两个字D,在后来开发过中,׃思\的{?IsRootModule,FunctionCode我都没有用到,Z让整个权限系l通变得更通用Q我都将其单独设计成了另一个表Q?/p>

功能表(功能表就是模块对应的功能Q增加,删除Q修改,详细Q列表,览Q导出,导入之类的)

业务表:用户-角色?模块-功能?角色-模块?/p>

要实C个用户多个角?1 to n),一个角色多个模?1 to n),一个模块多个功?1 to n)Q那得加上几个相关的业务表Q之前考虑用视囑֎实现Q我个h之见,视图最好只用来d数据Q不要用来进行数据操?后来证明是不可取的,q里要注意的是在实际的业务操作中,应该量避免重复的数据录? q些表都很简单,但却很关?/p>

用户-角色:

角色-模块Q?/p>

模块-功能:

大家可以看到Q表l构很简单,字段也很,设计也差不多。都是将相关联的字段ID取出来做数据存取?/p>

视图Q用?角色-模块-功能视图

 

可能大家会觉得很奇怪,Z么这里出现member_role呢。因为我们在数据表中只存取了ID|而对应的RoleName字段q没有包含其中,q里的视囑ְ是获取关联表中其他所需要的字段数据了。另外两个视囑֤家看名字应该q道他的用处了?/p>

存储q程Q各自表的增加,删除Q修改,及列表数? 判断是否存在相同的数?
QCUDLIS-Create, Update,Delete,IfExist,Show,List)

存储q程我就不一一列出了,很简单的Q你只要写出下面q些基本上你在开发过E就不会有太多问题了. 注意的是Q在怺兌的业务表中,最好能Ҏ据插入进行重复数据判断(用户角色表,模块功能表,角色模块表,量避免重复的数据插入)我把大致需要实现的业务列个表给大家参?

用户?(Insert ,Update ,IfExist ,Show, Delete)

用户角色?(Insert ,Update,IfExist,Delete,RoleListByUserID,UserListByRoleID)

角色?(Insert,Update,IfExist,Show,Delete)

角色模块?(Insert,IfExist,Delete,Show,RoleListByModuleID,ModulistByRoleID)

模块?(Insert,Update,IfExist,Show,Dlete,ListByRootModuleID,ListByModuleLevel)

模块功能?(Insert,Update,Delete,FunctionListByModuleID)

针对用户直接获取其所有的权限Ӟ应该有个单独的Procedure从视图中Member_Role_Module_Function中获取其对应的数据,q样可以得到想要的东西了?/p>

数据库设计部分应该就q样差不多了。我惌应该是通用的。在实际q用q程中,我个为应该有一些改q点Q?/p>

1.模块与功能部分,可以用字W串的Ş式将模块对应的功能存在一个数据字D中Q这样可能在你的代码~写中可以省下较多的旉q带来更多的便利Q主要是可以用split()来代曉KJ的数据获取业务Q这个我在最初设计中没有惛_q点Q有点失{?

2.针对NU模块的权限展现问题Q如何让父模块承子模块的权限这个是我没有考虑到的Q不q我惛_该可以用IsRootModuleq个字段来作文章Q可惜我q没惛_如何Lq个字段。当子模块很多时Q在前端UI展示的时候是否会出现很慢的情况?q个我没有去做测试,带有一定的风险?br /> 但在前端UI展示我还没想到或实现好的办法Q我能想到的应该是像GridViewTree那种不错?/p>

q个权限设计已经在我的Project中运用,暂时没有发现什么问题,而且为我以后对其它系l集成也很有帮助。至于如何在C#中实C务,个h认ؓ只要知道数据库如何整的,那C#中的业务实现只是一个取数操作过E?/p>

飞翔天 2009-06-26 20:24 发表评论
]]>
sqlserver 数据库区分大写讄http://www.tkk7.com/DreamAngel/archive/2009/05/12/270154.html飞翔天飞翔天Tue, 12 May 2009 02:29:00 GMThttp://www.tkk7.com/DreamAngel/archive/2009/05/12/270154.htmlhttp://www.tkk7.com/DreamAngel/comments/270154.htmlhttp://www.tkk7.com/DreamAngel/archive/2009/05/12/270154.html#Feedback0http://www.tkk7.com/DreamAngel/comments/commentRss/270154.htmlhttp://www.tkk7.com/DreamAngel/services/trackbacks/270154.html
默认情况下,SQL Server不区分大写Q如果数据表TEST的TNAME列中有数?#8220;abcd”?#8220;Abcd”Q?如果使用查询语句Qselect * from test  where  tname  like 'a%'Q则查询的结果会把上面的两条记录都查询出来,q一点上和Oracle有区别?br />
可以通过讄排序规其区分大写Q可以分别在创徏数据库、修Ҏ据库、创的字W型列(char\varchar\nchar\nvarchar{)时指定排序规则来实现。如

create database test  COLLATE  Chinese_PRC_CS_AS   --q样创徏的数据库中区分大写

alter database test  COLLATE  Chinese_PRC_CS_AS   --修改后的数据库中区分大小?

Create table test(tid int primary key,tname varchar(20) collate chines_prc_cs_as) --q样创徏的tname列在使用SELECT 语句时就可以区分大小写了?

飞翔天 2009-05-12 10:29 发表评论
]]>
ODBC配置SQL Serverhttp://www.tkk7.com/DreamAngel/archive/2009/03/27/262459.html飞翔天飞翔天Fri, 27 Mar 2009 08:42:00 GMThttp://www.tkk7.com/DreamAngel/archive/2009/03/27/262459.htmlhttp://www.tkk7.com/DreamAngel/comments/262459.htmlhttp://www.tkk7.com/DreamAngel/archive/2009/03/27/262459.html#Feedback0http://www.tkk7.com/DreamAngel/comments/commentRss/262459.htmlhttp://www.tkk7.com/DreamAngel/services/trackbacks/262459.html1Q?span style="font: 7pt 'Times New Roman'">  按如下步骤依ơ打开控制面板->性能l护->理工具->数据源(ODBCQ?/span>

2Q?span style="font: 7pt 'Times New Roman'">  选中pȝDSN选项卡,如图所C?/span>

3Q?span style="font: 7pt 'Times New Roman'">  点击“d“按钮Q在弹出的对话框中选择“SQL Server”Q单?#8220;完成”?/span>

  

4Q?span style="font: 7pt 'Times New Roman'">  ?#8220;名称”?#8220;服务?#8221;中输入相应的数据Q其?#8220;服务?#8221;名应机的名字,如图所C,单击“下一?#8221;?/span>

5Q?span style="font: 7pt 'Times New Roman'">  选择“用户输入登陆ID和密码的SQL Server验证”Q把“登陆ID”Q一般ؓsaQ和“密码”改ؓ你所讄的信息,取消 “q接SQL Server以获得其它配|选项的默认设|?#8221;的选中Q单?#8220;下一?#8221;?/span>

6Q?span style="font: 7pt 'Times New Roman'">  选择合适的数据库,单击“下一?#8221;?/span>

7Q?span style="font: 7pt 'Times New Roman'">  单击“完成”?/span>

8Q?span style="font: 7pt 'Times New Roman'">  在弹出的对话框中单击“试数据?#8221;Q如果连接正则昄“试成功”Q如图所C?/span> 



飞翔天 2009-03-27 16:42 发表评论
]]>
泰讯软g数据库笔试题?SQL Server 2000?http://www.tkk7.com/DreamAngel/archive/2009/03/16/260026.html飞翔天飞翔天Mon, 16 Mar 2009 07:02:00 GMThttp://www.tkk7.com/DreamAngel/archive/2009/03/16/260026.htmlhttp://www.tkk7.com/DreamAngel/comments/260026.htmlhttp://www.tkk7.com/DreamAngel/archive/2009/03/16/260026.html#Feedback3http://www.tkk7.com/DreamAngel/comments/commentRss/260026.htmlhttp://www.tkk7.com/DreamAngel/services/trackbacks/260026.html数据库中存在两张表:

 1--职工?/span>
 2CREATE TABLE [dbo].[emp] (
 3    [empid] [int] IDENTITY (11NOT NULL ,
 4    [empname] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
 5    [comm] [int] NULL ,
 6    [deptno] [int] NULL 
 7ON [PRIMARY]
 8
 9--部门?/span>
10CREATE TABLE [dbo].[dept] (
11    [deptno] [int] IDENTITY (11NOT NULL ,
12    [deptname] [char] (10) COLLATE Chinese_PRC_CI_AS NULL 
13ON [PRIMARY]

回答以下问题Q?/span>

1.         取出emp表中comm最的所有记录?/p>

1select * from emp where comm=(select min(comm) from emp)

2.         昄所有职工的empname以及其对应的deptnameQ如?/span>emp表中?/span>deptno?/span>dept表中找不刎ͼ?/span>deptname输出为空?/p>

1select e.empname,d.deptname from emp e left join dept d on e.deptno=d.deptno

3.         ?/span>emp表中的所?/span>comm讄?/span>comm=comm.+100;如果comm?/span>nullQ则comm=1?/p>

1update emp set comm=case 
2when comm is not NULL then comm+100
3when comm is null then 1
4end

4.         写一个存储过E,复制?/span>emp中的所有记录到emp表的末尾Q其?/span>empid自动?/span>1Q,要有抛出异常的处理?/p>

飞翔天 2009-03-16 15:02 发表评论
]]>
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection while in manual transaction mode.解决办法http://www.tkk7.com/DreamAngel/archive/2009/02/02/252916.html飞翔天飞翔天Mon, 02 Feb 2009 02:30:00 GMThttp://www.tkk7.com/DreamAngel/archive/2009/02/02/252916.htmlhttp://www.tkk7.com/DreamAngel/comments/252916.htmlhttp://www.tkk7.com/DreamAngel/archive/2009/02/02/252916.html#Feedback0http://www.tkk7.com/DreamAngel/comments/commentRss/252916.htmlhttp://www.tkk7.com/DreamAngel/services/trackbacks/252916.html错误情况Q?/span>

java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection while in manual transaction mode.

错误原因Q?/span>

1.         当你在一?/span>SQL SERVER?/span>JDBCq接上执行多?/span>STATEMENTS的操作?/span>

2.         手动事务状态(AutoCommit=false)Qƈ且?/span> direct (SelectMethod=direct) 模式?/span>

解决ҎQ?/span>

1.         保在你的连接上只有一?/span>STATEMENT操作?/span>

2.         使用手动事务模式Ӟ必须在连接字W串中加?/span>SelectMethod=Cursor。例如:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=RMS_Pro;SelectMethod=Cursor;User=sa;Password= ");



飞翔天 2009-02-02 10:30 发表评论
]]>
վ֩ģ壺 aƵɫ| һƵ| Ůһ| ޳aƬ߲һ| ѧŮëƬƵ| պ޲߹ۿ| պa߹ۿ| ɫ͵͵ͼۺ| zzjjzzjjƵȫ| Ůžžվֻ| þþƷƷ| ɫַ| ޹Ӱ߹ۿ| ˬָ߳ëƬ| ޾ƷŮ| һۿ| þֻƷ99| jlzzjlzzjzjzjz| һVR| Ļ߹ۿ| Ů@TubeumTV| 99Ƶ߾Ʒѹۿ6| ɫһƵ| þþþavרѿ| ԻԻ³ҹҹѲƵ| Ʒۺҹҹ| 3pһ| 2021ƷƵѲ| Ʒ޵һ| þ޾Ʒ벥| ĻѾƷƵ| ٶ100%ڵѹۿ| AVĻɫ| 2019Ļ| ѹۿվ| aƵ߹ۿ| Ļһþ| ѵƵݮ| վ߹ۿ| ۺϾþó69| ޹Ӱavַ|