<?xml version="1.0" 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>清风的blog - 数据库</title><link>http://blog.careff.com/</link><description>优然探索 - </description><generator>RainbowSoft Studio Z-Blog 2.2 Prism Build 140101</generator><language>zh-CN</language><copyright>Copyright (C) 2008-2024 careff.com Inc.,All  Rights Reserved.                    雅虎统计      </copyright><pubDate>Tue, 09 Jun 2026 11:29:39 +0800</pubDate><item><title>SQL删除重复记录</title><author>a@b.com (admin)</author><link>http://blog.careff.com/post/380.html</link><pubDate>Thu, 19 Dec 2013 16:09:38 +0800</pubDate><guid>http://blog.careff.com/post/380.html</guid><description><![CDATA[<p><span style="font-family: Arial; font-size: 14px; line-height: 24px;">数据库的使用过程中由于程序方面的问题有时候会碰到重复数据，重复数据导致了数据库部分设置不能正确设置&hellip;&hellip;&nbsp;</span><br style="font-family: Arial; font-size: 14px; line-height: 24px;" /><br style="font-family: Arial; font-size: 14px; line-height: 24px;" /><span style="font-family: Arial; font-size: 14px; line-height: 24px;">　　方法一</span><br style="font-family: Arial; font-size: 14px; line-height: 24px;" />&nbsp;</p><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0); font-family: Arial; font-size: 14px; line-height: 24px;">    <tbody>        <tr>            <td>declare @max integer,@id integer<br />            declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) &gt; 1<br />            open cur_rows<br />            fetch cur_rows into @id,@max<br />            while @@fetch_status=0<br />            begin<br />            select @max = @max -1<br />            set rowcount @max<br />            delete from 表名 where 主字段 = @id<br />            fetch cur_rows into @id,@max<br />            end<br />            close cur_rows<br />            set rowcount 0</td>        </tr>    </tbody></table><p><br style="font-family: Arial; font-size: 14px; line-height: 24px;" /><span style="font-family: Arial; font-size: 14px; line-height: 24px;">　　方法二</span><br style="font-family: Arial; font-size: 14px; line-height: 24px;" /><br style="font-family: Arial; font-size: 14px; line-height: 24px;" /><span style="font-family: Arial; font-size: 14px; line-height: 24px;">　　有两个意义上的重复记录，一是完全重复的记录，也即所有字段均重复的记录，二是部分关键字段重复的记录，比如Name字段重复，而其他字段不一定重复或都重复可以忽略。</span><br style="font-family: Arial; font-size: 14px; line-height: 24px;" /><br style="font-family: Arial; font-size: 14px; line-height: 24px;" /><span style="font-family: Arial; font-size: 14px; line-height: 24px;">　　1、对于第一种重复，比较容易解决，使用</span><br style="font-family: Arial; font-size: 14px; line-height: 24px;" />&nbsp;</p><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0); font-family: Arial; font-size: 14px; line-height: 24px;">    <tbody>        <tr>            <td>select distinct * from tableName</td>        </tr>    </tbody></table><p><br style="font-family: Arial; font-size: 14px; line-height: 24px;" /><span style="font-family: Arial; font-size: 14px; line-height: 24px;">　　就可以得到无重复记录的结果集。</span><br style="font-family: Arial; font-size: 14px; line-height: 24px;" /><br style="font-family: Arial; font-size: 14px; line-height: 24px;" /><span style="font-family: Arial; font-size: 14px; line-height: 24px;">　　如果该表需要删除重复的记录（重复记录保留1条），可以按以下方法删除</span><br style="font-family: Arial; font-size: 14px; line-height: 24px;" />&nbsp;</p><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0); font-family: Arial; font-size: 14px; line-height: 24px;">    <tbody>        <tr>            <td>select distinct * into #Tmp from tableName<br />            drop table tableName<br />            select * into tableName from #Tmp<br />            drop table #Tmp</td>        </tr>    </tbody></table><p><br style="font-family: Arial; font-size: 14px; line-height: 24px;" /><span style="font-family: Arial; font-size: 14px; line-height: 24px;">　　发生这种重复的原因是表设计不周产生的，增加唯一索引列即可解决。</span><br style="font-family: Arial; font-size: 14px; line-height: 24px;" /><br style="font-family: Arial; font-size: 14px; line-height: 24px;" /><span style="font-family: Arial; font-size: 14px; line-height: 24px;">　　2、这类重复问题通常要求保留重复记录中的第一条记录，操作方法如下</span><br style="font-family: Arial; font-size: 14px; line-height: 24px;" /><br style="font-family: Arial; font-size: 14px; line-height: 24px;" /><span style="font-family: Arial; font-size: 14px; line-height: 24px;">　　假设有重复的字段为Name,Address，要求得到这两个字段唯一的结果集</span><br style="font-family: Arial; font-size: 14px; line-height: 24px;" />&nbsp;</p><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0); font-family: Arial; font-size: 14px; line-height: 24px;">    <tbody>        <tr>            <td>select identity(int,1,1) as autoID, * into #Tmp from tableName<br />            select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID<br />            select * from #Tmp where autoID in(select autoID from #tmp2)</td>        </tr>    </tbody></table><p><br style="font-family: Arial; font-size: 14px; line-height: 24px;" /><span style="font-family: Arial; font-size: 14px; line-height: 24px;">　　最后一个select即得到了Name，Address不重复的结果集（但多了一个autoID字段，实际写时可以写在select子句中省去此列）</span></p>]]></description><category>数据库</category><comments>http://blog.careff.com/post/380.html#comment</comments><wfw:commentRss>http://blog.careff.com/feed.asp?cmt=380</wfw:commentRss></item><item><title>SQLSERVER时间函数</title><author>a@b.com (admin)</author><link>http://blog.careff.com/post/337.html</link><pubDate>Tue, 16 Aug 2011 12:43:36 +0800</pubDate><guid>http://blog.careff.com/post/337.html</guid><description><![CDATA[<p>1.一个月第一天的<br />SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)<br /><br />2.本周的星期一<br />SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)<br /><br />3.一年的第一天<br />SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)<br /><br />4.季度的第一天<br />SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)<br /><br />5.当天的半夜<br />SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)<br /><br />6.上个月的最后一天<br />SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))<br /><br />7.去年的最后一天<br />SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))<br /><br />8.本月的最后一天<br />SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))<br /><br />9.本年的最后一天<br />SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))<br /><br />10.本月的第一个星期一<br />select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)</p><p>&nbsp;</p><hr width="100%" color="#ff0000" size="20" /><p>1.year(date)&nbsp;&nbsp;返回年份<br />month(date)&nbsp;返回月份<br />day（date）返回日数<br />getdate（）以sql规定的标准内部格式返回系统当前的日期和时间<br />dateadd(datepart,number,date)返回datetime或smalldatetime类型的数据，其值为date值加上datepart和number参数指定的时间间隔<br />datediff（datepart,date1,date2)返回date1和date2间的时间间隔，其单位由datepart参数决定<br />datename（detepart，date）返回日期中指定部分的字符串<br />datepart（datepart，date）返回日期中指定对应的整数值</p><p>&nbsp;</p><p>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;日期元素对应取值范围<br />元素名称&nbsp;&nbsp;缩写&nbsp;&nbsp;取值范围<br />year&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1753-9999<br />quarter&nbsp;&nbsp;&nbsp;&nbsp;qq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1-4<br />month&nbsp;&nbsp;&nbsp;mm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1-12<br />dayof&nbsp;yeat&nbsp;dy&nbsp;&nbsp;&nbsp;&nbsp;1-366<br />day&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1-31<br />week&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0-51<br />hour&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0-23<br />minute&nbsp;&nbsp;&nbsp;&nbsp;mi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1-59<br />second&nbsp;&nbsp;&nbsp;&nbsp;ss&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1-59<br />millsecond&nbsp;&nbsp;ms&nbsp;&nbsp;0-999<br />3.系统提供的datetime和smalldatetime类型数据的转换样式<br />样式1为年的样式为yy，样式2年的格式为yyyy<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;样式1&nbsp;样式2<br />mm/dd/yy&nbsp;&nbsp;&nbsp;usa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;101<br />yy.mm.dd&nbsp;&nbsp;&nbsp;ansi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;102<br />dd/mm/yy&nbsp;&nbsp;&nbsp;french&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;103<br />dd.mm.yy&nbsp;&nbsp;&nbsp;german&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;104<br />dd-mm-yy&nbsp;&nbsp;&nbsp;italian&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;105<br />dd&nbsp;mon&nbsp;yy&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;106<br />mon&nbsp;dd,yy&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;107<br />hh:mm:ss&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;108<br />mon&nbsp;dd&nbsp;yyyy<br />hh:mi:ss:mmmmam&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;109或9<br />mm-dd-yy&nbsp;&nbsp;&nbsp;usa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;110<br />yy/mm/dd&nbsp;&nbsp;&nbsp;japan&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;111<br />yymmdd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iso&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;112<br />dd&nbsp;mon&nbsp;yyyy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-113或13<br />hh:mm:ss:mmm(Am)&nbsp;&nbsp;&nbsp;14&nbsp;&nbsp;&nbsp;114&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />4.select&nbsp;convert(char(6),getdate(),12)</p><p>&nbsp;</p><hr width="100%" color="#ff0000" size="20" /><p>getdate() 返回日期</p><p>datename(datepart,date_expr) 返回名称如 June</p><p>datepart(datepart,date_expr) 取日期一部份</p><p>datediff(datepart,date_expr1.dateexpr2) 日期差</p><p>dateadd(datepart,number,date_expr) 返回日期加上 number</p><p>上述函数中datepart的</p><p>写法 取值和意义</p><p>yy 1753-9999 年份</p><p>qq 1-4 刻</p><p>mm 1-12 月</p><p>dy 1-366 日</p><p>dd 1-31 日</p><p>wk 1-54 周</p><p>dw 1-7 周几</p><p>hh 0-23 小时</p><p>mi 0-59 分钟</p><p>ss 0-59 秒</p><p>ms 0-999 毫秒</p>]]></description><category>数据库</category><comments>http://blog.careff.com/post/337.html#comment</comments><wfw:commentRss>http://blog.careff.com/feed.asp?cmt=337</wfw:commentRss></item><item><title>关闭SQLSERVER缓存查询数据</title><author>a@b.com (admin)</author><link>http://blog.careff.com/post/336.html</link><pubDate>Wed, 27 Jul 2011 11:58:32 +0800</pubDate><guid>http://blog.careff.com/post/336.html</guid><description><![CDATA[<p>DBCC DROPCLEANBUFFERS&nbsp; <br />DBCC FREEPROCCACHE<br />SET STATISTICS IO ON<br />SET STATISTICS TIME ON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>]]></description><category>数据库</category><comments>http://blog.careff.com/post/336.html#comment</comments><wfw:commentRss>http://blog.careff.com/feed.asp?cmt=336</wfw:commentRss></item><item><title>SQLServer安装程序配置服务器失败</title><author>a@b.com (admin)</author><link>http://blog.careff.com/post/54.html</link><pubDate>Thu, 11 Sep 2008 10:03:37 +0800</pubDate><guid>http://blog.careff.com/post/54.html</guid><description><![CDATA[<p>SQLServer安装程序配置服务器失败.参考服务器错误日志和c:\windows\sqlstp.log了解更多信息&rdquo;错误2007年07月15日 星期日 16:25SQL 2000 安装程序配置服务器失败解决方法：日志文件引用内容：</p><p>13:09:40 Process Exit Code: (-1) <br />13:10:45 安装程序配置服务器失败。参考服务器错误日志和 C:\WINDOWS\sqlstp.log 了解更多信息。<br />13:10:45 Action CleanUpInstall:<br />13:10:45 C:\WINDOWS\TEMP\SqlSetup\Bin\scm.exe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Silent 1 -Action 4 -Service SQLSERVERAGENT<br />13:10:46 Process Exit Code: (1060) 指定的服务并未以已安装的服务存在。</p><p>13:10:46 C:\WINDOWS\TEMP\SqlSetup\Bin\scm.exe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Silent 1 -Action 4 -Service MSSQLSERVER<br />13:10:47 Process Exit Code: (0) <br />13:10:47 StatsGenerate returned: 2<br />13:10:47 StatsGenerate (0x80000000,0x1,0xf000000,0x200,2052,303,0x0,0x1,0,0,0<br />13:10:47 StatsGenerate -1,Alvin)<br />13:10:47 Installation Failed.13:09:40 Process Exit Code: (-1) <br />13:10:45 安装程序配置服务器失败。参考服务器错误日志和 C:\WINDOWS\sqlstp.log 了解更多信息。<br />13:10:45 Action CleanUpInstall:<br />13:10:45 C:\WINDOWS\TEMP\SqlSetup\Bin\scm.exe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Silent 1 -Action 4 -Service SQLSERVERAGENT<br />13:10:46 Process Exit Code: (1060) 指定的服务并未以已安装的服务存在。</p><p>13:10:46 C:\WINDOWS\TEMP\SqlSetup\Bin\scm.exe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Silent 1 -Action 4 -Service MSSQLSERVER<br />13:10:47 Process Exit Code: (0) <br />13:10:47 StatsGenerate returned: 2<br />13:10:47 StatsGenerate (0x80000000,0x1,0xf000000,0x200,2052,303,0x0,0x1,0,0,0<br />13:10:47 StatsGenerate -1,Alvin)<br />13:10:47 Installation Failed.在一个博客的评论里找到了如下解决办法供大家参考。</p><p>第一步：去掉&ldquo;以前的某个程序安装已在安装计算机上创建挂起的文件操作&rdquo;的提示（否则你需要重启机器的）<br />打开注册表编辑器，在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Control\Session Manager中找到PendingFileRenameOperations项目，并删除它。这样就可以清除安装暂挂项目。</p><p><br />第二步：启动安装程序，不同的是，安装的时候选择&ldquo;高级选项&rdquo;，并点选&ldquo;重建注册表项&rdquo;，然后继续安装，目录继续指定上次安装的目录，这样安装就成功啦。&nbsp; <br />&nbsp;</p>]]></description><category>数据库</category><comments>http://blog.careff.com/post/54.html#comment</comments><wfw:commentRss>http://blog.careff.com/feed.asp?cmt=54</wfw:commentRss></item><item><title>Sqlserver自定义函数</title><author>a@b.com (admin)</author><link>http://blog.careff.com/post/18.html</link><pubDate>Wed, 10 Sep 2008 21:03:17 +0800</pubDate><guid>http://blog.careff.com/post/18.html</guid><description><![CDATA[<p>Sqlserver自定义函数</p><p><br />用户定义自定义函数像内置函数一样返回标量值，也可以将结果集用表格变量返回</p><p>用户自定义函数的类型:</p><p>标量函数:返回一个标量值</p><p>表格值函数{内联表格值函数、多表格值函数}:返回行集（即返回多个值）</p><p><br />1、标量函数</p><p>Create function 函数名（参数）</p><p>Returns 返回值数据类型</p><p>[with {Encryption | Schemabinding }]</p><p>[as]</p><p>begin</p><p>SQL语句(必须有return 变量或值)</p><p><br />End</p><p><br />Schemabinding :将函数绑定到它引用的对象上（注：函数一旦绑定，则不能删除、修改，除非删除绑定）</p><p><br />Create function AvgResult(@scode varchar(10))</p><p>Returns real</p><p>As</p><p>Begin</p><p>&nbsp;&nbsp; Declare @avg real</p><p>&nbsp;&nbsp; Declare @code varchar(11)</p><p>&nbsp;&nbsp; Set @code=@scode + &lsquo;%&rsquo;</p><p>&nbsp;&nbsp; Select @avg=avg(result) from LearnResult_baijiali</p><p>Where scode like @code</p><p>Return @avg</p><p>End</p><p><br />执行用户自定义函数</p><p>select 用户名。函数名 as 字段别名</p><p>select dbo.AvgResult(&lsquo;s0002&rsquo;) as result</p><p><br />用户自定义函数返回值可放到局部变量中，用set ,select,exec赋值</p><p>declare @avg1 real ,@avg2 real ,@avg3 real</p><p>select @avg1= dbo.AvgResult(&lsquo;s0002&rsquo;)</p><p>set @avg2= dbo.AvgResult(&lsquo;s0002&rsquo;)</p><p>exec @avg3= dbo.AvgResult &lsquo;s0002&rsquo;</p><p>select @avg1 as avg1 ,@avg2 as avg2 ,@avg3 as avg3</p><p><br />函数引用</p><p><br />create function code(@scode varchar(10))</p><p>returns varchar(10)</p><p>as</p><p>begin</p><p>declare @ccode varchar(10)</p><p>set @scode = @scode + &lsquo;%&rsquo;</p><p>select @ccode=ccode from cmessage</p><p>&nbsp;&nbsp; where ccode like @scode</p><p>return @ccode</p><p>end</p><p><br />select name from class where ccode = dbo.code(&lsquo;c001&rsquo;)</p><p><br />2、表格值函数</p><p>a、 内联表格值函数</p><p>格式：</p><p>create function 函数名（参数）</p><p>returns table</p><p>[with {Encryption | Schemabinding }]</p><p>as</p><p>return(一条SQL语句)</p><p><br />create function tabcmess(@code varchar(10))</p><p>returns table</p><p>as</p><p>return(select ccode,scode from cmessage where ccode like @ccode)</p><p><br />b、 多句表格值函数</p><p>&nbsp;&nbsp; create function 函数名（参数）</p><p>&nbsp;&nbsp; returns 表格变量名table (表格变量定义)</p><p>&nbsp;&nbsp; [with {Encryption | Schemabinding }]</p><p>as</p><p>&nbsp;&nbsp; begin</p><p>&nbsp;&nbsp;&nbsp; SQL语句</p><p>&nbsp;&nbsp; end</p><p><br />多句表格值函数包含多条SQL语句，至少有一条在表格变量中填上数据值</p><p>表格变量格式</p><p>returns @变量名 table (column 定义| 约束定义 [,&hellip;])</p><p>对表格变量中的行可执行select,insert,update,delete ， 但select into 和 insert 语句的结果集是从存储过程插入。</p><p><br />Create function tabcmessalot (@code varchar(10))</p><p>Returns @ctable table(code varchar(10) null,cname varchar(100) null)</p><p>As</p><p>Begin</p><p>Insert @ctable</p><p>Select ccode,explain from cmessage</p><p>Where scode like @code</p><p>return</p><p>End</p><p><br />Select * from tabcmessalot(&lsquo;s0003&rsquo;)</p><p>&nbsp;</p>]]></description><category>数据库</category><comments>http://blog.careff.com/post/18.html#comment</comments><wfw:commentRss>http://blog.careff.com/feed.asp?cmt=18</wfw:commentRss></item><item><title>SQL Server开发人员应聘常被问的问题妙解汇总</title><author>a@b.com (admin)</author><link>http://blog.careff.com/post/17.html</link><pubDate>Wed, 10 Sep 2008 21:01:53 +0800</pubDate><guid>http://blog.careff.com/post/17.html</guid><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以前职场中很难找到非常合格的数据库开发人员。我的一个同事曾经说过:&ldquo;SQL开发是一门语言，它很容易学，但是很难掌握。&rdquo; <br />　　在面试应聘的SQL Server数据库开发人员时，我运用了一套标准的基准技术问题。下面这些问题是我觉得能够真正有助于淘汰不合格应聘者的问题。它们按照从易到难的顺序排列。当您问到关于主键和外键的问题时，后面的问题都十分有难度，因为答案可能会更难解释和说明，尤其是在面试的情形下。</p><p>一、您能向我简要叙述一下SQL Server 2000中使用的一些数据库对象吗?</p><p>　　您希望听到的答案包括这样一些对象:表格、视图、用户定义的函数，以及存储过程;如果他们还能够提到像触发器这样的对象就更好了。如果应聘者不能回答这个基本的问题，那么这不是一个好兆头。</p><p>二、什么是索引?SQL Server 2000里有什么类型的索引?</p><p>　　任何有经验的数据库开发人员都应该能够很轻易地回答这个问题。一些经验不太多的开发人员能够回答这个问题，但是有些地方会说不清楚。</p><p>　　简单地说，索引是一个数据结构，用来快速访问数据库表格或者视图里的数据。在SQL Server里，它们有两种形式:聚集索引和非聚集索引。聚集索引在索引的叶级保存数据。这意味着不论聚集索引里有表格的哪个(或哪些)字段，这些字段都会按顺序被保存在表格。由于存在这种排序，所以每个表格只会有一个聚集索引。非聚集索引在索引的叶级有一个行标识符。这个行标识符是一个指向磁盘上数据的指针。它允许每个表格有多个非聚集索引。</p><p>三、NULL是什么意思?</p><p>　　NULL(空)这个值是数据库世界里一个非常难缠的东西，所以有不少应聘者会在这个问题上跌跟头您也不要觉得意外。</p><p>　　NULL这个值表示UNKNOWN(未知):它不表示&ldquo;&rdquo;(空字符串)。假设您的SQL Server数据库里有ANSI_NULLS，当然在默认情况下会有，对NULL这个值的任何比较都会生产一个NULL值。您不能把任何值与一个 UNKNOWN值进行比较，并在逻辑上希望获得一个答案。您必须使用IS NULL操作符。</p><p>四、什么是主键?什么是外键?</p><p>　　主键是表格里的(一个或多个)字段，只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。</p><p>五、什么是触发器?SQL Server 2000有什么不同类型的触发器?</p><p>　　让未来的数据库开发人员知道可用的触发器类型以及如何实现它们是非常有益的。</p><p>　　触发器是一种专用类型的存储过程，它被捆绑到SQL Server 2000的表格或者视图上。在SQL Server 2000里，有INSTEAD-OF和AFTER两种触发器。INSTEAD-OF触发器是替代数据操控语言(Data Manipulation Language，DML)语句对表格执行语句的存储过程。例如，如果我有一个用于TableA的INSTEAD-OF-UPDATE触发器，同时对这个表格执行一个更新语句，那么INSTEAD-OF-UPDATE触发器里的代码会执行，而执行的更新语句则不会执行操作。</p><p>　　AFTER触发器要在DML语句在数据库里使用之后才执行。这些类型的触发器对于监视发生在数据库表格里的数据变化十分好用。</p><p>六、您如何确一个带有名为Fld1字段的TableB表格里只具有Fld1字段里的那些值，而这些值同时在名为TableA的表格的Fld1字段里?</p><p>　　这个与关系相关的问题有两个可能的答案。第一个答案(而且是您希望听到的答案)是使用外键限制。外键限制用来维护引用的完整性。它被用来确保表格里的字段只保存有已经在不同的(或者相同的)表格里的另一个字段里定义了的值。这个字段就是候选键(通常是另外一个表格的主键)。</p><p>　　另外一种答案是触发器。触发器可以被用来保证以另外一种方式实现与限制相同的作用，但是它非常难设置与维护，而且性能一般都很糟糕。由于这个原因，微软建议开发人员使用外键限制而不是触发器来维护引用的完整性。</p><p>七、对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑?</p><p>　　您正在寻找进行与数据操控有关的应聘人员。对一个表格的索引越多，数据库引擎用来更新、插入或者删除数据所需要的时间就越多，因为在数据操控发生的时候索引也必须要维护。</p><p>八、您可以用什么来确保表格里的字段只接受特定范围里的值?</p><p>　　这个问题可以用多种方式来回答，但是只有一个答案是&ldquo;好&rdquo;答案。您希望听到的回答是Check限制，它在数据库表格里被定义，用来限制输入该列的值。</p><p>　　触发器也可以被用来限制数据库表格里的字段能够接受的值，但是这种办法要求触发器在表格里被定义，这可能会在某些情况下影响到性能。因此，微软建议使用Check限制而不是其他的方式来限制域的完整性。</p><p>九、返回参数和OUTPUT参数之间的区别是什么?</p><p>　　如果应聘者能够正确地回答这个问题，那么他的机会就非常大了，因为这表明他们具有使用存储过程的经验。</p><p>　　返回参数总是由存储过程返回，它用来表示存储过程是成功还是失败。返回参数总是INT数据类型。</p><p>　　OUTPUT参数明确要求由开发人员来指定，它可以返回其他类型的数据，例如字符型和数值型的值。(可以用作输出参数的数据类型是有一些限制的。)您可以在一个存储过程里使用多个OUTPUT参数，而您只能够使用一个返回参数。</p><p>十、什么是相关子查询?如何使用这些查询?</p><p>　　经验更加丰富的开发人员将能够准确地描述这种类型的查询。</p><p>　　相关子查询是一种包含子查询的特殊类型的查询。查询里包含的子查询会真正请求外部查询的值，从而形成一个类似于循环的状况。</p><p>关于面试过程的思考：</p><p>　　这些问题只不过是确定一个SQL Server数据库开发人员是否合格的起点。根据应聘者对上面这些问题的回答情况，我可能会要求他们参加我的TSQL编程考试，这一般是一套根据不同情况进行的10到12个数据库查询。</p><p>　　您需要自己决定将要雇用的开发人员具有什么样的专业技能。然后，需要通过自己的经验、判断以及在面试时对应聘者的感受(来做最终决定)。<br />&nbsp;<br />&nbsp;</p>]]></description><category>数据库</category><comments>http://blog.careff.com/post/17.html#comment</comments><wfw:commentRss>http://blog.careff.com/feed.asp?cmt=17</wfw:commentRss></item><item><title>sql server 安装</title><author>a@b.com (admin)</author><link>http://blog.careff.com/post/16.html</link><pubDate>Wed, 10 Sep 2008 21:01:08 +0800</pubDate><guid>http://blog.careff.com/post/16.html</guid><description><![CDATA[<p>sql server 2000以前的版本，例如7.0一般不存在多个版本，只有标准版跟桌面版，用户如果不清楚该装什么版本的话，可按安装上的安装先决条件指示安装，一般在win2000 服务器版上装标准版，其他的系统装桌面版的就可以；而sql server 2000安装问题就比较大，时常见问题有如下：</p><p>　(1)配置服务器时中断.</p><p>　(2)注册 activex 时中断.</p><p>　(3)显示到100％的时候中断.</p><p>　(4)提示：command line option syntax error, type command /? for help，继续安装,最后在配置服务器的时候出现：无法找到动态链接sqlunirl.dll于指定的路径&hellip;&hellip;</p><p>　(5)以前进行的程序创建了挂起的文件操作，运行安装程序前，必须重新启动</p><p>(1)(2)(3)的解决办法：</p><p>　　提醒：为避免误操作，先备份注册表和数据库进不了sql server 2000,可以备份 program files\microsoft sql server\mssql\data 文件夹的文件.</p><p>　1、先把sql　 server卸载（卸载不掉也没有关系，继续下面的操作）</p><p>　2、把microsoft　 sql　 server文件夹整个删掉。</p><p>　3、运行注册表,删除如下项：</p><p>hkey_current_user\software\microsoft\microsoft　 sql　 server</p><p>hkey_local_machine\software\microsoft\microsoft　 sql　 server</p><p>hkey_local_machine\software\microsoft\mssqlserver</p><p>　4、需要的话就重新启动系统</p><p>　5、重新安装</p><p>　　另外也可尝试单步运行安装 sql server 2000的方法：</p><p>　1:放入 sql server 2000 光盘.</p><p>　2:在&quot;开始&quot;--&quot;运行&quot;键入 &quot;f:\x86\setup.exe k=dbg&quot; (f是光盘)</p><p>注意：</p><p>　　一、不同的操作系统支持的sql server 2000版本以及对硬件的要求。</p><p>windows 2000　 server可以安装sql server 2000的任何版本.</p><p>windows 2000　 professional只能安装sql server 2000的个人版、开发版、评估版、mcde</p><p>　　二、sql server 2000各版本以及对硬件的要求。</p><p>(4)的解决办法</p><p>　　因为安装文件的路径(完整路径)里有中文.</p><p>　比如 c:\sqlserver中文企业版\</p><p>　改成 c:\sqlserver\</p><p>(5)的解决办法</p><p>　　a、重启机器，再进行安装，如果发现还有该错误，请按下面步骤</p><p>　　b、在开始-&gt;运行中输入regedit</p><p>　　c、到hkey_local_machine\system\currentcontrolset\control\session manager 位置</p><p>　　d、选择文件-&gt;倒出,保存</p><p>　　e、在右边窗口右击pendingfilerenameoperations，选择删除，然后确认</p><p>　　f、重启安装，问题解决</p><p>我们做一些事情，欲想成功，有时总得好事多磨。决定学习SQL Server2000，在网上找了N久都没找到一个完全可以下载的，后来总算找到了。下载完之后，准备安装SQL Server2000个人版，本以为安装会很simple，安装完之后一运行企业管理器，才发现本该在控制台根目录/SQL Server组下的（数据库；数据转换服务；管理；复制；安全性；支持服务；Meta；Date； Service）等七个字目录都没显示，上面提示说&ldquo;找不到SQL Server或连接不上服务器&rdquo;，再去运行服务管理器，无法连接。没道理啊，软件杀过毒，安装都是默认的，机子没中标，咋会不行呢？后来重新安装了几遍，总算把问题解决了。&nbsp;&nbsp;&nbsp;&nbsp; 解决方法如下：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 运行安装程序，然后按照默认的摁下一步，到了&quot;身份验证模式&quot;的时候，如果选&quot;windows身份验证模式&quot;,根本就没法完成安装，这个地方应该选&quot;混合模式&quot;，输入sa密码。好了，你看到完成安装了。不过又有问题出现，运行服务管理器，连接你的服务器时，出现连接失败的错误信息。在网上找了半天，终于解决了。找到控制面板--管理工具--服务--MSSQLSERVER，右键、属性，登陆选项中，选择&quot;本地系统帐户&quot;，并且在&quot;允许服务与桌面交互&quot;前面打钩。再次连接服务器，一切OK了<br />&nbsp;</p>]]></description><category>数据库</category><comments>http://blog.careff.com/post/16.html#comment</comments><wfw:commentRss>http://blog.careff.com/feed.asp?cmt=16</wfw:commentRss></item><item><title>sql server 安装</title><author>a@b.com (admin)</author><link>http://blog.careff.com/post/15.html</link><pubDate>Wed, 10 Sep 2008 21:01:08 +0800</pubDate><guid>http://blog.careff.com/post/15.html</guid><description><![CDATA[<p>sql server 2000以前的版本，例如7.0一般不存在多个版本，只有标准版跟桌面版，用户如果不清楚该装什么版本的话，可按安装上的安装先决条件指示安装，一般在win2000 服务器版上装标准版，其他的系统装桌面版的就可以；而sql server 2000安装问题就比较大，时常见问题有如下：</p><p>　(1)配置服务器时中断.</p><p>　(2)注册 activex 时中断.</p><p>　(3)显示到100％的时候中断.</p><p>　(4)提示：command line option syntax error, type command /? for help，继续安装,最后在配置服务器的时候出现：无法找到动态链接sqlunirl.dll于指定的路径&hellip;&hellip;</p><p>　(5)以前进行的程序创建了挂起的文件操作，运行安装程序前，必须重新启动</p><p>(1)(2)(3)的解决办法：</p><p>　　提醒：为避免误操作，先备份注册表和数据库进不了sql server 2000,可以备份 program files\microsoft sql server\mssql\data 文件夹的文件.</p><p>　1、先把sql　 server卸载（卸载不掉也没有关系，继续下面的操作）</p><p>　2、把microsoft　 sql　 server文件夹整个删掉。</p><p>　3、运行注册表,删除如下项：</p><p>hkey_current_user\software\microsoft\microsoft　 sql　 server</p><p>hkey_local_machine\software\microsoft\microsoft　 sql　 server</p><p>hkey_local_machine\software\microsoft\mssqlserver</p><p>　4、需要的话就重新启动系统</p><p>　5、重新安装</p><p>　　另外也可尝试单步运行安装 sql server 2000的方法：</p><p>　1:放入 sql server 2000 光盘.</p><p>　2:在&quot;开始&quot;--&quot;运行&quot;键入 &quot;f:\x86\setup.exe k=dbg&quot; (f是光盘)</p><p>注意：</p><p>　　一、不同的操作系统支持的sql server 2000版本以及对硬件的要求。</p><p>windows 2000　 server可以安装sql server 2000的任何版本.</p><p>windows 2000　 professional只能安装sql server 2000的个人版、开发版、评估版、mcde</p><p>　　二、sql server 2000各版本以及对硬件的要求。</p><p>(4)的解决办法</p><p>　　因为安装文件的路径(完整路径)里有中文.</p><p>　比如 c:\sqlserver中文企业版\</p><p>　改成 c:\sqlserver\</p><p>(5)的解决办法</p><p>　　a、重启机器，再进行安装，如果发现还有该错误，请按下面步骤</p><p>　　b、在开始-&gt;运行中输入regedit</p><p>　　c、到hkey_local_machine\system\currentcontrolset\control\session manager 位置</p><p>　　d、选择文件-&gt;倒出,保存</p><p>　　e、在右边窗口右击pendingfilerenameoperations，选择删除，然后确认</p><p>　　f、重启安装，问题解决</p><p>我们做一些事情，欲想成功，有时总得好事多磨。决定学习SQL Server2000，在网上找了N久都没找到一个完全可以下载的，后来总算找到了。下载完之后，准备安装SQL Server2000个人版，本以为安装会很simple，安装完之后一运行企业管理器，才发现本该在控制台根目录/SQL Server组下的（数据库；数据转换服务；管理；复制；安全性；支持服务；Meta；Date； Service）等七个字目录都没显示，上面提示说&ldquo;找不到SQL Server或连接不上服务器&rdquo;，再去运行服务管理器，无法连接。没道理啊，软件杀过毒，安装都是默认的，机子没中标，咋会不行呢？后来重新安装了几遍，总算把问题解决了。&nbsp;&nbsp;&nbsp;&nbsp; 解决方法如下：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 运行安装程序，然后按照默认的摁下一步，到了&quot;身份验证模式&quot;的时候，如果选&quot;windows身份验证模式&quot;,根本就没法完成安装，这个地方应该选&quot;混合模式&quot;，输入sa密码。好了，你看到完成安装了。不过又有问题出现，运行服务管理器，连接你的服务器时，出现连接失败的错误信息。在网上找了半天，终于解决了。找到控制面板--管理工具--服务--MSSQLSERVER，右键、属性，登陆选项中，选择&quot;本地系统帐户&quot;，并且在&quot;允许服务与桌面交互&quot;前面打钩。再次连接服务器，一切OK了<br />&nbsp;</p>]]></description><category>数据库</category><comments>http://blog.careff.com/post/15.html#comment</comments><wfw:commentRss>http://blog.careff.com/feed.asp?cmt=15</wfw:commentRss></item><item><title>sqlServer安装问题集锦</title><author>a@b.com (admin)</author><link>http://blog.careff.com/post/14.html</link><pubDate>Wed, 10 Sep 2008 21:00:06 +0800</pubDate><guid>http://blog.careff.com/post/14.html</guid><description><![CDATA[<p>SQL2005 分五个版本，如下所列，<br />　　1.Enterprise(企业版), <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.Development(开发版),<br />　　3.Workgroup,(工作群版)<br />　　4.Standard,(标准版)<br />　　5.Express.(嗯，估且就叫它简易版吧)<br />　　这几个版本，我们究竟应该使用哪一版呢﹖<br />　　这是许多初学SQL2005的人最常问的问题。<br />　　我简单的比较一下 Enterprise, Development 和 Express 等三个版本:以功能言，Enterprise 版和 Development 版的功能一模一样。两者的差别，除了授权不同外，最主要的差别是:<br />　　Enterprise版的数据库引擎只能安装在Win2003Server(或其他Server)。<br />　　如果你想安装在WindowsXP Pro系统上，你应该安装SQL2005Development版(开发版)。<br />　　注:有人问，什么是「数据库引擎」。嗯，数据库引擎是SQL2005的核心，是最主要的数据库管理功能模块。没有它，就不是数据库管理系统了。<br />　　很多人下载 SQL2005Express版，因为它是免费的，可以直接从微软网站上下载。但是，它除了支持的内存比较少外，最主要的是<br />　　它缺少相当于SQL2000下的「企业管理器」和「查询分析器」。<br />　　注:SQL2000下的「企业管理器」和「查询分析器」在SQL2005已合为一，称为 Management Studio。<br />　　因此，如果你是初学者，如果你只是想要在家里学习学习，如果你的环境是 WindowsXP Pro，那么，你应该选择的是 SQL2005Development(开发版)，而不是SQL2005Enterprise(企业版)或SQL2005Express(简易版)。<br />　　SQL2005 入门者，你选择正确了吗﹖</p><p>&nbsp;&nbsp;&nbsp;&nbsp; 我就是从&ldquo; Microsoft.SQL.Server.2005.Enterprise.Edition.DVD-ZWTiSO，请大家下载加速 &quot; <br />上下载的,说明文件里显示是&quot;标准版和企业版&quot;,但是我在安装的时候显示不能满足最低的硬件要求（我的机器的配置：server2003企业版 AMD2800+，512M DDR400内存，系统盘有16G的空闲空间），在组件选择框里，只能看见native client和安装sample 数据库，这究竟是什么原因？2005的硬件要求真的那么高吗？ 或者说这到底影响安装和使用吗? <br />在我不改变硬件的情况下怎么解决上面的问题啊</p><p>应该是满足硬件要求的，看安装时的提示是什么吧</p><p>2005数据库安装心得</p><p><br />我的环境是xp sp2 EN，SQL 2005 Dev版，内存512MB。 <br />　　首先，我的系统已经使用半年多了，装有VS2003，以前还装过SQL2000，netFramework2.0beta，还有好几个beta版的SQL 2005，可谓十分&ldquo;肮脏&rdquo;了，呵呵。最早的时候我下过一个2005EE版，怎么也安装不上，后来发现原来是EE不支持xp =_= ，然后就下了DE版的。</p><p>　　刚开始安装的时候吓了我一跳，丫的居然要占用我C盘1300多MB!!忍了。(我是把SQL装在F盘的，但是居然还需要C盘1300多MB)。但是却安装失败，看了一下安装日志，天书，不明白。只知道是native client几个组件安装不成功。重复多次问题依旧。</p><p>　　研究安装包之后，发现里面有两个主要的文件夹，是server和tools。顾名思义，server里面肯定是服务的安装文件了，而tools里面应该是那些工具组件的安装文件。进入tools里面，果然有个setup，运行之，竟然安装成功了，而且只占了我C盘200多MB，好兴奋(没有选择BI，就是那个商业智能组件，太大了)。然后重启电脑(不是必须的，只是一次setup之后系统慢的不行了)，进入server目录下面，当然也有一个setup啦，运行之，呵呵，果然是安装服务用的啊。这次也顺利安装成功了。再去看C盘，哈哈，一共只用了我300多MB，竟然节省了1GB。</p><p>　　当然了，其实一起安装的话，也不一定会用完1300MB的空间的，因为安装结束之后还会自动删除一些垃圾文件的。但是不管怎么说，至少让我能正常安装了。我的C盘只有1400的空闲空间了，不知道起初安装失败是不是跟这有关系。</p><p>　　至此，SQL 2005已经成功的在我电脑上安家了。安装的时候，如果你的电脑和我的一样是内存不足(小于1GB)，性能也不足够大(我的CPU是centrio 1.3G，呵呵，装在本本上了)，建议在安装的时候把系统开始是需要运行的服务全都不选择，用的时候再手动运行好了。</p><p>　　运行Management Studio，嗯，速度还挺快的呢。连接服务器，竟然没有localhost，呵呵，打开server configuration manager,把右边那个MSSQLSERVER运行起来。ok，这次没有问题了。</p><p>　　使用一切正常，就是发现从sql2000里面备份出来的数据库在2005下只能通过sql语句修改数据，而不能所见及所得的修改，不知道怎么回事。</p><p>　　btw:后来又把商业智能组件装上了，只用了C盘150MB，开心。</p><p>SQL2005安装过程提示com+目录问题警告处理</p><p><br />安装sql2005一直失败,以为提示的问题是这个com+目录问题警告所致,找了很久找到这个问题的解决方案<br />sql2005_STD_X86在XPSP2下安装失败的一点经验<br />软环境是XPSP2，安装SQL2005_STD_X86版。<br />故障提示：<br />1。如果 SQL Server 安装程序失败，安装程序将回滚所安装的系统，但可能不会删除所有 .manifest 文件。解决方法是重命名这些文件，然后重新运行安装程序。有关详细信息，请参阅&ldquo;如何处理 SQL Server 安装过程中的 COM+ 检查失败问题&rdquo;。如果未运行 Microsoft 分布式事务处理协调器 (MS DTC)，或者，在使用 Microsoft 群集服务器的情况下，如果 MS DTC 不是群集资源，则可能会发生 COM+ 错误。COM+ 依赖于 MS DTC，而 Integration Services 中的消息队列任务依赖于 COM +。如果出现 COM+ 错误，则只有将 COM+ 系统正确配置后，Integration Services 中的消息队列任务才可用。<br />2。对性能监视器计数器注册表值执行系统配置检查失败。有关详细信息，请参阅自述文件或 SQL Server 联机丛书中的&ldquo;如何在 SQL Server 2005 中为安装程序增加计数器注册表项值&rdquo;。<br />安装中止。<br />查找联机丛书，有如下提示：<br />1。Microsoft SQL Server 2005 安装程序检查 COM+ 是否已正确配置。如果发现配置错误，安装程序仍将继续，但是在系统配置检查 (SCC) 报告中显示以下警告：<br />&ldquo;如果 SQL Server 安装程序失败，安装程序将回滚所进行的安装，但可能不会删除所有的 .manifest 文件。解决方法是重命名这些文件，然后重新运行安装程序。&rdquo;<br />如果未运行 Microsoft 分布式事务处理协调器 (MS DTC)，或者，在使用 Microsoft 群集服务器的情况下，如果 MS DTC 不是群集资源，则可能会发生 COM+ 错误。COM+ 依赖于 MS DTC，而 Integration Services 中的消息队列任务依赖于 COM +。如果出现 COM+ 错误，则只有将 COM+ 系统正确配置后，Integration Services 中的消息队列任务才可用。 <br />若要使用消息队列（亦称 MSMQ），请确保 MS DTC 正在运行并且已正确配置。如果 SQL Server 安装在群集上，则 MS DTC 必须是群集资源。<br />按照下列过程重新安装 COM+。<br />安装组件服务管理单元<br />在 Windows 桌面上，单击&ldquo;开始&rdquo;，然后单击&ldquo;运行&rdquo;。<br />在&ldquo;打开&rdquo;框中，键入 MMC，然后单击&ldquo;确定&rdquo;。<br />在&ldquo;控制台&rdquo;窗口中，单击菜单栏上的&ldquo;文件&rdquo;，然后单击&ldquo;添加/删除管理单元&rdquo;。<br />在&ldquo;添加/删除管理单元&rdquo;窗口，单击&ldquo;添加&rdquo;。<br />在&ldquo;添加独立管理单元&rdquo;窗口，从管理单元列表中选择&ldquo;组件服务&rdquo;，然后单击&ldquo;添加&rdquo;。<br />单击&ldquo;关闭&rdquo;以关闭&ldquo;添加独立管理单元&rdquo;窗口，然后单击&ldquo;确定&rdquo;以关闭&ldquo;添加/删除管理单元&rdquo;窗口。<br />在&ldquo;控制台根节点\组件服务&rdquo;窗口，展开&ldquo;组件服务&rdquo;树。这就是当 COM+ 出现问题时，错误消息可能发生的地方。<br />再次运行 SQL Server 2005 安装程序。如果收到错误消息，请重新安装 COM+。<br />重新安装 COM+<br />从控制面板的&ldquo;添加或删除程序&rdquo;中，单击&ldquo;添加/删除 Windows 组件&rdquo;。<br />在&ldquo;Windows 组件向导&rdquo;中，不对选择做任何更改，单击&ldquo;下一步&rdquo;。<br />一直单击以完成向导，然后再次运行 SQL Server 2005 安装程序。<br />2。在 SQL Server 安装开始前，Microsoft SQL Server 安装程序中的安装配置检查器 (SCC) 会验证计数器注册表项的值。如果 SCC 无法验证现有的注册表项，或 SCC 无法运行 lodctr.exe 系统程序，则 SCC 检查会失败，致使安装受阻。<br />错误编辑注册表会严重损坏您的系统。更改注册表项之前，建议您备份计算机中的所有重要数据。 <br />手动设置计数器注册表项的增量<br />在 Microsoft Windows 2003 或 Windows XP 桌面上，依次单击&ldquo;开始&rdquo;、&ldquo;运行&rdquo;，然后在&ldquo;打开&rdquo;中键入 regedit.exe，再单击&ldquo;确定&rdquo;。在 Windows 2000 中，使用 regedt32.exe 启动注册表编辑器。<br />定位到以下注册表项：<br />[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib]<br />&quot;Last Counter&quot;=dword:00000ed4 (5276)<br />&quot;LastHelp&quot;=dword:00000ed5 (5277)<br />上一步的&ldquo;Last Counter&rdquo;值 (5276) 必须与以下注册表项中&ldquo;Perflib\009&rdquo;的&ldquo;Counter&rdquo;项的最大值匹配，并且上一步的&ldquo;Last Help&rdquo;值 (5277) 必须与以下注册表项中&ldquo;Perflib\009&rdquo;的&ldquo;Help&rdquo;项的最大值匹配。<br />[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009]<br />注意 009 是英文中的一个示例。&ldquo;Last Counter&rdquo;和&ldquo;Last Help&rdquo;值是由 Windows 动态分配的；这两个值会因计算机的不同而不同。<br />如有必要，可修改&ldquo;\Perflib&rdquo;项中的&ldquo;Last Counter&rdquo;和&ldquo;Last Help&rdquo;值的值：在右侧窗格中，右键单击&ldquo;Last Counter&rdquo;或&ldquo;Last Help&rdquo;，单击&ldquo;修改&rdquo;，再单击&ldquo;Base = &quot;Decimal&quot;&rdquo;，在&ldquo;值数据&rdquo;中设置值，再单击&ldquo;确定&rdquo;。如有必要，对另一个项重复以上过程，然后关闭注册表编辑器。<br />再次运行 SQL Server 安装程序。<br />解决过程：<br />COM+检查失败不用说肯定是组件消息队列下的组件没安装或服务没启动。本机没有安装过消息队列，找出系统盘安装消息队列组件，在组件安装中提示MSDTC服务没有启动，在这步晕了长很时间，MSTDC在服务中怎么也找不到，后来想会不会是DTC（脑子有点笨，其实从MSMQ这名称上就应该想到），一看果然有Distributed Transaction Coordinator（DTC），但是这个服务启动不了，后来查找相关资料：MSDTC( Distributed Transaction Coordinator )服务必须在 NT AUTHORITY\NetworkService 帐户下运行；即使是 NT AUTHORITY\Network Service（注意，Network和Service中间有空格）也不行（至于这两个帐户的区别，在网上也没有找到，还望大家不吝赐教 ）。如果登录帐户被更改，MSDTC服务会继续运行，但是在执行的时候可能会出错。而且，在事件日志的&ldquo;应用程序&rdquo;里面可以发现如下的出错信息： <br />正在运行 MS DTC 服务的帐户无效。 如果使用 Microsoft Management Console (MMC) 中的&ldquo;服务&rdquo;管理单元更改了服务帐户信息，就会发生这种情况。 MS DTC 服务将继续启动。请确认使用&ldquo;组件服务管理器&rdquo;更新了 MS DTC 服务帐户信息。 <br />要更改成正确的登录帐户，我们可以： <br />在服务中找到Distributed Transaction Coordinator服务，选择&ldquo;属性&rdquo;； <br />在&ldquo;登录&rdquo;选项卡中，选择&ldquo;此帐户&rdquo;，帐户名填写&ldquo;NT AUTHORITY\NetworkService&rdquo;，密码为空； <br />在点击&ldquo;确定&rdquo;后重新启动服务。 <br />或者，在命令行下运行 msdtc -uninstall ，卸载 msdtc 服务； <br />再运行 msdtc -install ，安装 msdtc 服务。 <br />MSTDC服务成功启动，组件服务中&ldquo;COM+应用程序&rdquo;可以访问，上面第2项故障没去解决，先试着安装看看有没有错误，令人惊喜，安装检查一切顺利，第2项错误同时也解决了。<br />当然，解决问题的过程同样的系统环境也不尽相同，在这里谈一下我安装的小挫折，希望可以给碰到相同问题的朋友有些提示作用。</p><p><br />sql2005安装过程owc11错误处理</p><p><br />最近安装了很久的sql2005,过程中间出现很多问题,之前的com+目录警告是一个部分,处理过之后还是发现一直无法安装成功,(为此我安装了10+)次才解决问题<br />在安装过程中发现以下错误<br />Product&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : OWC11<br />Error&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 错误 1706。安装程序找不到需要的文件。请检查网络连接或 CD-ROM 驱动器状态。对于这个问题的其他可能的解决方案，请参阅 C:\Program Files\Microsoft Office\OFFICE11\2052\SETUP.CHM。<br />--------------------------------------------------------------------------------<br />发现自己的ocw11没有安装导致服务器的有关组件全部无法安装,每次都是安装失败,<br />在microsoft ocw11下载地址<br />找到microsoft的ocw11,选择简体中文后下载安装后发现还是出现相同的问题,<br />把下载下来的ocw11解压缩后观察该ocw11.xml,发现sql 2005的server的setup目录下面有相同文件名文件,再次逐次对比发现该ocw11里面的文件包里面的文件对应的setup里面全部都有,不过发现2个chm的后缀不同,一个是10XX,一个是2052,呵呵,原来是版本不同<br />直接运行setup目录下面的setup,选择修复或全新安装全部提示错误的文件源,再次观察,把setup目录下面对应的的ocw11文件全部拷贝到硬盘上面,再次运行修复成功,之后安装sql2005终于一路成功,困扰了我2天的问题终于解决,特此把本文于全体学习sql2005的朋友分享,希望大家少走弯路.一起交流sql的有关功能<br />&nbsp;</p>]]></description><category>数据库</category><comments>http://blog.careff.com/post/14.html#comment</comments><wfw:commentRss>http://blog.careff.com/feed.asp?cmt=14</wfw:commentRss></item><item><title>关于SQL Server事务日志的问题汇总</title><author>a@b.com (admin)</author><link>http://blog.careff.com/post/13.html</link><pubDate>Wed, 10 Sep 2008 20:59:12 +0800</pubDate><guid>http://blog.careff.com/post/13.html</guid><description><![CDATA[<p>关于SQL Server事务日志的问题汇总</p><p>1.用backup log database with no_log清除日志把数据库属性中的故障还原模型改为&ldquo;简单&rdquo;可以大大减慢日志</p><p>是日志文件会很小,如果数据比较重要推荐还是把数据库的还原模型调为完全 【程序编程相关:Oracle RMAN快速入门指南】</p><p>增长的速度.&nbsp;&nbsp; 如果把还原模型调到简单,这样就不支持时间点还原了,但 【推荐阅读:存储过程编写经验和优化措施】</p><p>志,不减小物理日志文件的大小,但逻辑日志会减小,收缩数据库后会把不活动虚拟日志删除来释 【扩展信息:使用正规表达式编写更好的 SQL】</p><p>用backup log database with no_log命名后,会截断不活动日</p><p>放空间,不会损坏数据.</p><p>如果日志被截断并收缩数据库后,就不能直接用最近的一个全库</p><p>备份做时间点还原,建议立即备份数据库,以防万一.</p><p>2.sql server运行中,是否能删除主数据库事务日志文件 步骤如下:(1).分离数据库企业管理器－－数据库－－右击你要删除日志的数据库－－所有</p><p>任务－－分离数据库(2).然后删除日志文件(3).然后再附加数据库企业管理器－－数据库－－右击数据库－－所有任务－－附加数</p><p>据库这时候只附加.mdf就可以了.</p><p>3.压缩sql数据库及日志的详细方法</p><p>sql server 2000基础教程&mdash;&mdash;压缩数据库数据库在使用一段时间后,时常会出现因数据删除而造成数据库</p><p>中空闲空间太多的情况,这时就需要减少分配给数据库文件与事</p><p>务日志文件的磁盘空间,以免浪费磁盘空间.当数据库中没有数</p><p>据时,可以修改数据库文件属性直接改变其占用空间,但当数据</p><p>库中有数据时,这样做会破坏数据库中的数据,因此需要使用压</p><p>缩的方式来缩减数据库空间.可以在数据库属性选项中选择&ldquo;</p><p>auto shrink&rdquo;选项,让系统自动压缩数据库,也可以用人工的</p><p>方法来压缩.人工压缩数据库有以下两种方式:1.用enterprise manager 压缩数据库在enterprise manager 中在所要压缩的数据库上单击右键,从</p><p>快捷菜单中的&ldquo;所有任务（all tasks）&rdquo;中选择&ldquo;shrink</p><p>database（压缩数据库）&rdquo;选项,就会出现如图6-10 所示的对</p><p>话框.可以在图6-10 所示的对话框中选择数据库的压缩方式,</p><p>也可以选择使用压缩计划或压缩单个文件 单击图6-10 中的&ldquo;files&rdquo;按钮,会出现如图6-11 所示的压缩</p><p>数据库文件对话框,可以针对每个数据库文件进行不同的压缩设</p><p>置.</p><p>中的&ldquo;change&rdquo; 按钮,会出现如图6-13 所示的循环工作计划编 【程序编程相关:Oracle RMAN快速入门指南】</p><p>缩计划编辑对话框,可以指定压缩计划的执行方式.单击图6-12 【推荐阅读:存储过程编写经验和优化措施】</p><p>&ldquo;ok&rdquo; 按钮就开始压缩数据库,在压缩结束后会显示一个压缩 【扩展信息:使用正规表达式编写更好的 SQL】</p><p>辑对话框,可以编辑计划执行的周期或时间点.设置完成后单击</p><p>情况信息框.&nbsp;&nbsp;&nbsp; 2.用transact-sql 命令压缩数据库可以使用dbcc shrinkdatabase 与dbcc shrinkfile 命令来压缩</p><p>数据库.其中dbcc shrinkdatabase 命令对数据库进行压缩,</p><p>dbcc shrinkfile 命令对数据库中指定的文件进行压缩.（1） dbcc shrinkdatabase dbcc shrinkdatabase 命令语法如下:dbcc shrinkdatabase (database_name [, target_percent][, {notruncate | truncateonly}] )各参数说明如下: &middot;target_percent 指定将数据库压缩后,未使用的空间占数据</p><p>库大小的百分之几.如果指定的百分比过大,超过了压缩前未使</p><p>用空间所占的比例,则数据库不会被压缩.并且压缩后的数据库</p><p>不能比数据库初始设定的容量小. &middot;notruecate将数据库缩减后剩余的空间保留在数据库,中不返还给操作系统</p><p>.如果不选择此选项,则剩余的空间返还给操作系统. &middot;truncateonly将数据库缩减后剩余的空间返还给操作系统.使用此命令时sql</p><p>server 将文件缩减到最后一个文件分配,区域但不移动任何数</p><p>据文件.选择此项后,target_percent 选项就无效了.例6-14: 压缩数据库mytest 的未使用空间为数据库大小的20%</p><p>.dbcc shrinkdatabase (mytest, 20)运行结果如下:dbcc execution completed. if dbcc printed error</p><p>messages, contact your system administrator. (2) dbcc shrinkfiledbcc shrinkfile 命令压缩当前数据库中的文件.<br />其语法如下:dbcc shrinkfile ( {file_name | file_id }{ [, target_size] |[, {emptyfile | notruncate | truncateonly}] } )各参数说明如下:&middot;file_id指定要压缩的文件的鉴别号（identification number, 即id）</p><p><br />的sp_helpdb 系统存储过程来得到. &middot;target_size指定文件压缩后的大小.以mb 为单位.如果不指定此选项,sql 【程序编程相关:Oracle RMAN快速入门指南】</p><p>.文件的id 号可以通过 file_id（）函数或如本章前面所讲述 【推荐阅读:存储过程编写经验和优化措施】</p><p>组中的其它文件中去.执行带此参数的命令后,此文件就可以用 【扩展信息:使用正规表达式编写更好的 SQL】</p><p>server 就会尽最大可能地缩减文件. &middot;emptyfile指明此文件不再使用,将移动所有在此文件中的数据到同一文件</p><p>alter database 命令来删除了. 其余参数notruncate 与truncateonly 与dbcc shrinkdatabase</p><p>命令中的含义相同. 例6-15: 压缩数据库mydb 中的数据库文件mydb_data2 的大小到</p><p>1mb. use mydb dbcc shrinkfile (mydb_data2, 1)</p><p>企业管理器里面的方法:1.打开企业管理器2.打开要处理的数据库3.点击最上面菜单&gt;工具&gt;sql查询分析器,打开sql查询分析器4.在输入窗口里面输入:</p><p>code:dump transaction [数据库名] with no_logbackup log [数据库名] with no_logdbcc shrinkdatabase([数据库名])</p><p>点击绿色的小三角（或按f5）执行查询,等状态栏提示处理完成</p><p>即可！</p><p>程序里面的方法:压缩数据库日志--1.清空日志exec(dump transaction [+@dbname+] with no_log) --2.截断事务日志:exec(backup log [+@dbname+] with no_log)--3.收缩数据库文件(如果不压缩,数据库的文件不会减小exec(dbcc shrinkdatabase([+@dbname+]))</p><p>4.减小日志的方法:</p><p>一.用如下步做了:1.dump　transaction　庫名　with　no_log2.dbcc shrinkfile(logfilename)3.收縮數據庫4.設定自動收縮.</p><p>二.分离数据库,删除日志文件,再附加,ok!右击数据库－－所有任务－－分离or 附加</p><p>&nbsp;</p>]]></description><category>数据库</category><comments>http://blog.careff.com/post/13.html#comment</comments><wfw:commentRss>http://blog.careff.com/feed.asp?cmt=13</wfw:commentRss></item></channel></rss>
