﻿<?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-SIMONE-随笔分类-SQL SERVER</title><link>http://www.blogjava.net/wangxinsh55/category/9196.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 02 Jul 2012 11:14:52 GMT</lastBuildDate><pubDate>Mon, 02 Jul 2012 11:14:52 GMT</pubDate><ttl>60</ttl><item><title>将数据分组并只取每组前N条</title><link>http://www.blogjava.net/wangxinsh55/archive/2012/06/07/380231.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 07 Jun 2012 07:12:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2012/06/07/380231.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/380231.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2012/06/07/380231.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/380231.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/380231.html</trackback:ping><description><![CDATA[<div>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体;color:black;">我们经常会有这样的需求，即按照地区来分别取出每个地区排名前3的那些记录。本文总结了几种方法，希望大家补充。</span></p>  <p style="text-align:left;" align="left">&nbsp;</p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体;color:black;">首先，创建测试用的表和数据，如下：</span></p>  <p style="text-align:left;" align="left">&nbsp;</p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">create</span> <span style="font-size:12.0pt; font-family:宋体;color:blue;">table</span><span style="font-size:12.0pt;font-family:宋体; color:black;"> test</span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:black;">(</span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:black;">areaid </span><span style="font-size:12.0pt;font-family:宋体;color:blue;">int</span><span style="font-size:12.0pt; font-family:宋体;color:black;">,</span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:black;">score </span><span style="font-size:12.0pt;font-family:宋体;color:blue;">int</span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:black;">)</span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">insert</span> <span style="font-size:12.0pt; font-family:宋体;color:blue;">into</span><span style="font-size:12.0pt;font-family:宋体; color:black;"> test </span><span style="font-size:12.0pt;font-family:宋体;color:blue;">select</span> <strong><span style="font-size:12.0pt;font-family:宋体; color:maroon;">0</span></strong><span style="font-size:12.0pt;font-family:宋体;color:black;">,</span><strong><span style="font-size:12.0pt; font-family:宋体;color:maroon;">10</span></strong></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">union</span> <span style="font-size:12.0pt;font-family:宋体;color:gray;">all</span> <span style="font-size: 12.0pt;font-family:宋体;color:blue;">select</span> <strong><span style="font-size: 12.0pt;font-family:宋体;color:maroon;">0</span></strong><span style="font-size:12.0pt;font-family:宋体;color:black;">,</span><strong><span style="font-size:12.0pt;font-family:宋体; color:maroon;">20</span></strong></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">union</span> <span style="font-size:12.0pt;font-family:宋体;color:gray;">all</span> <span style="font-size: 12.0pt;font-family:宋体;color:blue;">select</span> <strong><span style="font-size: 12.0pt;font-family:宋体;color:maroon;">0</span></strong><span style="font-size:12.0pt;font-family:宋体;color:black;">,</span><strong><span style="font-size:12.0pt;font-family:宋体; color:maroon;">30</span></strong></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">union</span> <span style="font-size:12.0pt;font-family:宋体;color:gray;">all</span> <span style="font-size: 12.0pt;font-family:宋体;color:blue;">select</span> <strong><span style="font-size: 12.0pt;font-family:宋体;color:maroon;">0</span></strong><span style="font-size:12.0pt;font-family:宋体;color:black;">,</span><strong><span style="font-size:12.0pt;font-family:宋体; color:maroon;">40</span></strong></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">union</span> <span style="font-size:12.0pt;font-family:宋体;color:gray;">all</span> <span style="font-size: 12.0pt;font-family:宋体;color:blue;">select</span> <strong><span style="font-size: 12.0pt;font-family:宋体;color:maroon;">0</span></strong><span style="font-size:12.0pt;font-family:宋体;color:black;">,</span><strong><span style="font-size:12.0pt;font-family:宋体; color:maroon;">50</span></strong></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">union</span> <span style="font-size:12.0pt;font-family:宋体;color:gray;">all</span> <span style="font-size: 12.0pt;font-family:宋体;color:blue;">select</span> <strong><span style="font-size: 12.0pt;font-family:宋体;color:maroon;">1</span></strong><span style="font-size:12.0pt;font-family:宋体;color:black;">,</span><strong><span style="font-size:12.0pt;font-family:宋体; color:maroon;">10</span></strong></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">union</span> <span style="font-size:12.0pt;font-family:宋体;color:gray;">all</span> <span style="font-size: 12.0pt;font-family:宋体;color:blue;">select</span> <strong><span style="font-size: 12.0pt;font-family:宋体;color:maroon;">1</span></strong><span style="font-size:12.0pt;font-family:宋体;color:black;">,</span><strong><span style="font-size:12.0pt;font-family:宋体; color:maroon;">20</span></strong></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">union</span> <span style="font-size:12.0pt;font-family:宋体;color:gray;">all</span> <span style="font-size: 12.0pt;font-family:宋体;color:blue;">select</span> <strong><span style="font-size: 12.0pt;font-family:宋体;color:maroon;">1</span></strong><span style="font-size:12.0pt;font-family:宋体;color:black;">,</span><strong><span style="font-size:12.0pt;font-family:宋体; color:maroon;">30</span></strong></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">union</span> <span style="font-size:12.0pt;font-family:宋体;color:gray;">all</span> <span style="font-size: 12.0pt;font-family:宋体;color:blue;">select</span> <strong><span style="font-size: 12.0pt;font-family:宋体;color:maroon;">1</span></strong><span style="font-size:12.0pt;font-family:宋体;color:black;">,</span><strong><span style="font-size:12.0pt;font-family:宋体; color:maroon;">40</span></strong></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">union</span> <span style="font-size:12.0pt;font-family:宋体;color:gray;">all</span> <span style="font-size: 12.0pt;font-family:宋体;color:blue;">select</span> <strong><span style="font-size: 12.0pt;font-family:宋体;color:maroon;">1</span></strong><span style="font-size:12.0pt;font-family:宋体;color:black;">,</span><strong><span style="font-size:12.0pt;font-family:宋体; color:maroon;">50</span></strong></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">union</span> <span style="font-size:12.0pt;font-family:宋体;color:gray;">all</span> <span style="font-size: 12.0pt;font-family:宋体;color:blue;">select</span> <strong><span style="font-size: 12.0pt;font-family:宋体;color:maroon;">2</span></strong><span style="font-size:12.0pt;font-family:宋体;color:black;">,</span><strong><span style="font-size:12.0pt;font-family:宋体; color:maroon;">10</span></strong></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">union</span> <span style="font-size:12.0pt;font-family:宋体;color:gray;">all</span> <span style="font-size: 12.0pt;font-family:宋体;color:blue;">select</span> <strong><span style="font-size: 12.0pt;font-family:宋体;color:maroon;">2</span></strong><span style="font-size:12.0pt;font-family:宋体;color:black;">,</span><strong><span style="font-size:12.0pt;font-family:宋体; color:maroon;">20</span></strong></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">union</span> <span style="font-size:12.0pt;font-family:宋体;color:gray;">all</span> <span style="font-size: 12.0pt;font-family:宋体;color:blue;">select</span> <strong><span style="font-size: 12.0pt;font-family:宋体;color:maroon;">2</span></strong><span style="font-size:12.0pt;font-family:宋体;color:black;">,</span><strong><span style="font-size:12.0pt;font-family:宋体; color:maroon;">30</span></strong></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">union</span> <span style="font-size:12.0pt;font-family:宋体;color:gray;">all</span> <span style="font-size: 12.0pt;font-family:宋体;color:blue;">select</span> <strong><span style="font-size: 12.0pt;font-family:宋体;color:maroon;">2</span></strong><span style="font-size:12.0pt;font-family:宋体;color:black;">,</span><strong><span style="font-size:12.0pt;font-family:宋体; color:maroon;">40</span></strong></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">union</span> <span style="font-size:12.0pt;font-family:宋体;color:gray;">all</span> <span style="font-size: 12.0pt;font-family:宋体;color:blue;">select</span> <strong><span style="font-size: 12.0pt;font-family:宋体;color:maroon;">2</span></strong><span style="font-size:12.0pt;font-family:宋体;color:black;">,</span><strong><span style="font-size:12.0pt;font-family:宋体; color:maroon;">50</span></strong></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">go</span></p>  <p style="text-align:left;" align="left">&nbsp;</p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体;color:black;">第一种方法适用于sql2000和2005，其代码如下：</span></p>  <p style="text-align:left;" align="left">&nbsp;</p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">select</span> <span style="font-size:12.0pt; font-family:宋体;color:gray;">*</span> <span style="font-size: 12.0pt;font-family:宋体;color:blue;">from</span><span style="font-size:12.0pt;font-family:宋体; color:black;"> test a</span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">where</span><span style="font-size: 12.0pt;font-family:宋体;color:black;"> checksum(</span><span style="font-size:12.0pt;font-family: 宋体;color:gray;">*</span><span style="font-size:12.0pt;font-family:宋体; color:black;">) </span><span style="font-size: 12.0pt;font-family:宋体;color:gray;">in</span><span style="font-size:12.0pt;font-family:宋体; color:black;"> (</span><span style="font-size: 12.0pt;font-family:宋体;color:blue;">select</span> <span style="font-size: 12.0pt;font-family:宋体;color:blue;">top</span> <strong><span style="font-size: 12.0pt;font-family:宋体;color:maroon;">3</span></strong><span style="font-size:12.0pt;font-family:宋体;color:black;"> checksum(</span><span style="font-size:12.0pt;font-family:宋体; color:gray;">*</span><span style="font-size: 12.0pt;font-family:宋体;color:black;">) </span><span style="font-size:12.0pt;font-family:宋体;color:blue;">from</span><span style="font-size:12.0pt;font-family:宋体; color:black;"> test b </span><span style="font-size:12.0pt;font-family:宋体;color:blue;">where</span><span style="font-size:12.0pt; font-family:宋体;color:black;"> a.areaid</span><span style="font-size:12.0pt;font-family:宋体;color:gray;">=</span><span style="font-size:12.0pt;font-family:宋体; color:black;">b.areaid </span><span style="font-size:12.0pt;font-family:宋体;color:blue;">order</span> <span style="font-size:12.0pt;font-family:宋体; color:blue;">by</span><span style="font-size: 12.0pt;font-family:宋体;color:black;"> score </span><span style="font-size:12.0pt;font-family:宋体;color:blue;">desc</span><span style="font-size:12.0pt;font-family:宋体; color:black;">)</span></p>  <p style="text-align:left;" align="left">&nbsp;</p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体;color:black;">第二种方法是利用sql2005的函数ROW_NUMBER，其代码如下：</span></p>  <p style="text-align:left;" align="left">&nbsp;</p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">WITH</span><span style="font-size: 12.0pt;font-family:宋体;color:black;"> test1 </span><span style="font-size:12.0pt;font-family:宋体;color:blue;">AS</span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:black;">(</span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:black;">&nbsp;&nbsp;&nbsp; </span><span style="font-size:12.0pt;font-family:宋体; color:blue;">SELECT</span> <span style="font-size:12.0pt; font-family:宋体;color:gray;">*</span><span style="font-size:12.0pt;font-family:宋体; color:black;">,</span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:black;">&nbsp;&nbsp; &nbsp;ROW_NUMBER() </span><span style="font-size:12.0pt;font-family:宋体;color:blue;">OVER</span><span style="font-size:12.0pt; font-family:宋体;color:black;"> (PARTITION </span><span style="font-size:12.0pt;font-family:宋体;color:blue;">BY</span><span style="font-size:12.0pt;font-family:宋体; color:black;"> areaid </span><span style="font-size:12.0pt;font-family:宋体;color:blue;">ORDER</span> <span style="font-size:12.0pt;font-family:宋体; color:blue;">BY</span><span style="font-size: 12.0pt;font-family:宋体;color:black;"> score </span><span style="font-size:12.0pt;font-family:宋体;color:blue;">desc</span><span style="font-size:12.0pt;font-family:宋体; color:black;">) </span><span style="font-size: 12.0pt;font-family:宋体;color:blue;">AS</span> <span style="font-size: 12.0pt;font-family:宋体;color:red;">'RowNumber'</span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:black;">&nbsp;&nbsp;&nbsp; </span><span style="font-size:12.0pt;font-family:宋体; color:blue;">FROM</span><span style="font-size: 12.0pt;font-family:宋体;color:black;"> test </span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:black;">) </span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">SELECT</span> <span style="font-size:12.0pt; font-family:宋体;color:gray;">*</span> </p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">FROM</span><span style="font-size: 12.0pt;font-family:宋体;color:black;"> test1 </span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">WHERE</span><span style="font-size: 12.0pt;font-family:宋体;color:black;"> RowNumber </span><span style="font-size:12.0pt;font-family: 宋体;color:gray;">BETWEEN</span> <strong><span style="font-size: 12.0pt;font-family:宋体;color:maroon;">1</span></strong> <span style="font-size:12.0pt;font-family:宋体; color:gray;">AND</span> <strong><span style="font-size:12.0pt;font-family:宋体;color:maroon;">3</span></strong><span style="font-size:12.0pt;font-family:宋体; color:black;">;</span></p>  <p style="text-align:left;" align="left">&nbsp;</p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体;color:black;">第三种方法是利用sql2005的<span>cross apply</span>来实现，其代码如下：</span></p>  <p style="text-align:left;" align="left">&nbsp;</p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">select</span><span style="font-size:12.0pt;font-family:宋体;color:black;">&nbsp;</span><span style="font-size:12.0pt;font-family:宋体; color:blue;">distinct</span><span style="font-size:12.0pt;font-family:宋体;color:black;"> t.</span><span style="font-size:12.0pt; font-family:宋体;color:gray;">*</span> <span style="font-size: 12.0pt;font-family:宋体;color:blue;">from</span><span style="font-size:12.0pt;font-family:宋体; color:black;"> test a</span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">cross</span><span style="font-size: 12.0pt;font-family:宋体;color:black;"> apply</span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:black;">(</span><span style="font-size: 12.0pt;font-family:宋体;color:blue;">select</span> <span style="font-size: 12.0pt;font-family:宋体;color:blue;">top</span> <strong><span style="font-size: 12.0pt;font-family:宋体;color:maroon;">3</span></strong><span style="font-size:12.0pt;font-family:宋体;color:black;"> areaid,score </span><span style="font-size:12.0pt;font-family:宋体; color:blue;">from</span><span style="font-size: 12.0pt;font-family:宋体;color:black;"> test</span></p>  <p style="text-align:left;" align="left"><span style="font-size:12.0pt;font-family:宋体; color:blue;">where</span><span style="font-size: 12.0pt;font-family:宋体;color:black;"> a.areaid</span><span style="font-size:12.0pt;font-family:宋体;color:gray;">=</span><span style="font-size:12.0pt;font-family:宋体; color:black;">areaid </span><span style="font-size:12.0pt;font-family:宋体;color:blue;">order</span> <span style="font-size:12.0pt;font-family:宋体; color:blue;">by</span><span style="font-size: 12.0pt;font-family:宋体;color:black;"> score </span><span style="font-size:12.0pt;font-family:宋体;color:blue;">desc</span><span style="font-size:12.0pt;font-family:宋体; color:black;">) </span><span style="font-size: 12.0pt;font-family:宋体;color:blue;">as</span><span style="font-size:12.0pt;font-family:宋体; color:black;"> T</span></p>  </div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/380231.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2012-06-07 15:12 <a href="http://www.blogjava.net/wangxinsh55/archive/2012/06/07/380231.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>异地SQL Server数据库查询及备份等操作</title><link>http://www.blogjava.net/wangxinsh55/archive/2012/03/02/371146.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Fri, 02 Mar 2012 09:13:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2012/03/02/371146.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/371146.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2012/03/02/371146.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/371146.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/371146.html</trackback:ping><description><![CDATA[<div>--给本机添加链接服务器，首先需要在 数据库客户端创建数据库别名&#8220;testDatabase&#8221;<br />exec sp_addlinkedserver @server='testDatabase',@srvproduct='SQL Server';<br />--给本地创建登录链接<br />exec sp_addlinkedsrvlogin @rmtsrvname=testDatabase, @useself=false, @rmtuser=username, @rmtpassword=password;<br />--查看所有已链接的服务器<br />exec sp_linkedservers<br /><br />--测试是否创建远程链接成功<br />declare @str varchar(100);<br />exec @str=sp_testlinkedserver testDatabase;<br />print @str;<br /><br />--检索远程数据库表<br />select top 10 * from testDatabase.MobileLib.dbo.wap_news<br /><br />--删除已链接服务器<br /><div>EXEC sp_droplinkedsrvlogin mobileIRDDB,NULL<br /><br />--删除本地登录服务器<br />exec sp_dropserver mobileIRDDB</div></div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/371146.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2012-03-02 17:13 <a href="http://www.blogjava.net/wangxinsh55/archive/2012/03/02/371146.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL大表转为分区表实例</title><link>http://www.blogjava.net/wangxinsh55/archive/2011/04/20/348636.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Wed, 20 Apr 2011 08:03:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2011/04/20/348636.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/348636.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2011/04/20/348636.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/348636.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/348636.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: --&nbsp;进行演示操作前,&nbsp;先备份,&nbsp;以便可以在演示完成后,&nbsp;恢复到原始状态USE&nbsp;master--&nbsp;备份BACKUP&nbsp;DATABASE&nbsp;AdventureWorks&nbsp;&nbsp;&nbsp;&nbsp;TO&nbsp;DISK&nbsp;=&nbsp;'AdventureWorks.bak'...&nbsp;&nbsp;<a href='http://www.blogjava.net/wangxinsh55/archive/2011/04/20/348636.html'>阅读全文</a><img src ="http://www.blogjava.net/wangxinsh55/aggbug/348636.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2011-04-20 16:03 <a href="http://www.blogjava.net/wangxinsh55/archive/2011/04/20/348636.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Sql Server性能优化——Partition（创建分区）</title><link>http://www.blogjava.net/wangxinsh55/archive/2011/04/20/348634.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Wed, 20 Apr 2011 07:54:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2011/04/20/348634.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/348634.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2011/04/20/348634.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/348634.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/348634.html</trackback:ping><description><![CDATA[<div id="cnblogs_post_body">
<p>http://www.cnblogs.com/smjack/archive/2010/02/23/1671943.html<br />
<br />
和压缩（Compression）相比，数据库分区（Partition）的操作更为复杂繁琐。而且与Compression一次操作，终身保持不同，分区是一项需要长期维护周期变更的操作。</p>
<p>分区的意义在于将大数据从物理上切割为几个相互独立的小部分，从而在查询时只取出其中一个或几个分区，减少影响的数据；另外对于置于不同文件组的分区，并行查询的性能也要高于对整个表的查询性能。</p>
<p>事实上，在SQL Server 2005中就已经包含了分区功能，甚至在2005之前，还存在一个叫做&#8220;Partitioned Views&#8221;的功能，能通过将同样结构的表Union在一个View中，实现类似现在分区表的效果。而在SQL Server 2008中，分区功能得到了显著加强，使得我们不仅能够对表和索引做分区，<a href="http://www.sqlskills.com/blogs/paul/post/SQL-Server-2008-Partition-level-lock-escalation-details-and-examples.aspx" target="_blank"><strong>而且允许对分区上锁，而不是之前的全表上锁</strong></a>。</p>
<h1>指定分区列</h1>
<p>和Compression一样，在SQL Server 2008中也提供了分区的向导界面。在企业管理器中，需要分区的表上右键选择Storage-》Create Partition:</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/smjack/WindowsLiveWriter/SqlServerPartition_10859/image_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SqlServer性能优化——Partition（创建分区）" border="0" alt="SqlServer性能优化——Partition（创建分区）" src="http://images.cnblogs.com/cnblogs_com/smjack/WindowsLiveWriter/SqlServerPartition_10859/image_thumb_1.png" width="604" height="504" /></a> </p>
<p>&nbsp;</p>
<p>这里会列出该表所有的字段，包括字段类型、长度、精度及小数位数的信息，可以选择其中的任意一一列作为分区列（Patitioning Column），不仅仅是数字或者日期类型，即使是字符串类型的列，也可以按照字母顺序进行分区。而以下类型的列不可用于分区：<strong>text、ntext、image、xml、timestamp、varchar(max)、nvarchar(max)、varbinary(max)、别名、hierarchyid、空间索引或 CLR 用户定义的数据类型</strong>。此外，如果使用计算列作为分区列，则必须将该列<strong>设为持久化列</strong>（Persisit）。</p>
<p>在列表下方，提供了两个选项：</p>
<ol>
    <li><strong>分配到可用分区表</strong>： <br />
    这要求在同一数据库下有另一张已分好区的表，同时该表的分区列和当前选中的列的类型<strong>完全一致</strong>。 <br />
    这样的好处是当两张表在查询中有关联时，并且其关联列就是分区列时，使用同样的分区策略会更有效率。 </li>
    <li><strong>将非唯一索引和唯一索引的存储空间调整为与索引分区列一致</strong>： <br />
    这样会将表中的所有索引也一同分区，实现&#8220;对齐&#8221;。这是一个重要而麻烦的选项，具体需求请参阅MSDN（<a href="http://msdn.microsoft.com/zh-cn/library/ms187526.aspx" target="_blank">已分区索引的特殊指导原则</a>）。 <br />
    这样的好处是表和索引的分区一致，一方面查询时利用索引更为高效，而且在下文提到的<strong>移入移出分区</strong>也会更为高效。 </li>
</ol>
<p>注意：这里建议<strong>使用聚集索引列作为分区列</strong>。一方面索引结构本身就应与查询相关，那么分区列与索引一致会保证查询的最大效率；另一方面，保证索引对齐而且是聚集索引对齐是保证分区的移入移出操作顺畅的前提，否则可能会出现无法移入移出的情况，而分区的移入移出又是管理大数据的重要策略——<strong>滑动窗口</strong>（SlideWindow）策略的基础操作。另外，如果要进行索引对齐，<strong>需要所有索引和表的压缩模式一致</strong>。</p>
<h1>分区函数与分区方案</h1>
<p>选好分区列后，如果没有应用&#8220;分配到可用分区表&#8221;选项，接下来则会进入选择\创建<strong>分区函数</strong>以及<strong>分区方案</strong>的界面。其中分区函数会指定分区边界，而分区方案则规划了每个分区所存储的文件组。</p>
<p>向导操作界面如下：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/smjack/WindowsLiveWriter/SqlServerPartition_10859/image_6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SqlServer性能优化——Partition（创建分区）" border="0" alt="SqlServer性能优化——Partition（创建分区）" src="http://images.cnblogs.com/cnblogs_com/smjack/WindowsLiveWriter/SqlServerPartition_10859/image_thumb_2.png" width="604" height="504" /></a></p>
<p>其中Left boundary说明每个分区的边界值被包含在边界值左侧的分区中，也就是每个分区内的数据约束是<strong>&lt;=指定的边界值</strong>，相应的，Right boundary则说明每个分区的边界值被包含在边界值右侧的分区中，每个分区内的数据约束是<strong>&lt;指定的边界值</strong>。</p>
<p>在下方的列表中，列出了当前分区方案下现有的分区。其中文件组（Filegroup）指定了每个分区存放的位置，如果将分区放置于位于不同磁盘中的不同文件组中，由于不同磁盘的读写互不干扰，这将提高分区表并行处理的效率。一般情况下，将所有分区放置在同一个文件组是比较稳妥的做法。关于文件组的展开阅读可以参阅：<a href="http://www.sql-server-performance.com/tips/filegroups_p1.aspx" target="_blank">SQL Server Filegroups</a>。</p>
<p>注意，在这里<strong>最后一个分区是没有指定边界</strong>的，用于保存所有&gt;(Left Boundary)或&gt;=(Right boundary)最后一个分区边界的数据。</p>
<p>如果选择时间类型的字段作为分区列，可以通过Set按钮实现按条件分组：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/smjack/WindowsLiveWriter/SqlServerPartition_10859/image_8.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SqlServer性能优化——Partition（创建分区）" border="0" alt="SqlServer性能优化——Partition（创建分区）" src="http://images.cnblogs.com/cnblogs_com/smjack/WindowsLiveWriter/SqlServerPartition_10859/image_thumb.png" width="352" height="219" /></a> </p>
<p>这样可以很方便得通过设置起止时间将表按照指定时间段自动分区，但之后依然需要手动指定每个分区的文件组。</p>
<p>制定好分区方案之后可以通过Estimate sotrage预估每个分区的行数、空间占用情况，不过除非需要以占用空间或行数来规划你的分区策略，一般<strong>不建议在这里进行预估</strong>，因为如果对空表来说，预估的结果当然都是0，而如果表中已经包含大量数据，预估则会花费比较长的时间。</p>
<h1>创建分区</h1>
<p>通过以上设置，分区已经基本完毕，在向导的最后，可以选择是创建脚本还是立即执行分区操作。</p>
<p>我们可以查看在不同情况下创建分区的脚本的情况：</p>
<p><strong>1.在表没有索引的情况下：</strong></p>
<pre class="code"><span style="color: blue">BEGIN TRANSACTION
CREATE PARTITION FUNCTION </span>[TestFunction]<span style="color: gray">(</span><span style="color: blue">datetime</span><span style="color: gray">) </span><span style="color: blue">AS RANGE </span><span style="color: gray">LEFT </span><span style="color: blue">FOR VALUES </span><span style="color: gray">(</span><span style="color: red">N'2010-01-01T00:00:00'</span><span style="color: gray">, </span><span style="color: red">N'2010-02-01T00:00:00'</span><span style="color: gray">, <br />
</span><span style="color: red">N'2010-03-01T00:00:00'</span><span style="color: gray">, </span><span style="color: red">N'2010-04-01T00:00:00'</span><span style="color: gray">, </span><span style="color: red">N'2010-05-01T00:00:00'</span><span style="color: gray">, </span><span style="color: red">N'2010-06-01T00:00:00'</span><span style="color: gray">)
</span><span style="color: blue">CREATE PARTITION </span>SCHEME [TestScheme] <span style="color: blue">AS PARTITION </span>[TestFunction] <span style="color: blue">TO </span><span style="color: gray">(</span>[PRIMARY]<span style="color: gray">, </span>[PRIMARY]<span style="color: gray">, </span>[PRIMARY]<span style="color: gray">, <br />
</span>[PRIMARY]<span style="color: gray">, </span>[PRIMARY]<span style="color: gray">, </span>[PRIMARY]<span style="color: gray">, </span>[PRIMARY]<span style="color: gray">)
</span><span style="color: blue">CREATE CLUSTERED INDEX </span>[ClusteredIndex_on_TestScheme_634025264502439124] <span style="color: blue">ON </span>[dbo]<span style="color: gray">.</span>[Account]
<span style="color: gray">(
</span>[birthday]
<span style="color: gray">)</span><span style="color: blue">WITH </span><span style="color: gray">(</span><span style="color: blue">SORT_IN_TEMPDB </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">IGNORE_DUP_KEY </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">DROP_EXISTING </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">ONLINE </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">) </span><span style="color: blue">ON </span>[TestScheme]<span style="color: gray">(</span>[birthday]<span style="color: gray">)
</span><span style="color: blue">DROP INDEX </span>[ClusteredIndex_on_TestScheme_634025264502439124] <span style="color: blue">ON </span>[dbo]<span style="color: gray">.</span>[Account] <span style="color: blue">WITH </span><span style="color: gray">( </span><span style="color: blue">ONLINE </span><span style="color: gray">= </span><span style="color: blue">OFF </span><span style="color: gray">)
</span><span style="color: blue">COMMIT TRANSACTION</span></pre>
<p>这里先创建Partition Function以及Partition Scheme，之后在分区列上创建聚集索引并按照分区方案分区，最后删除了这一索引。&lt;/&gt; <a href="http://11011.net/software/vspaste"></a></p>
<p><strong>2.在表有索引的情况下：</strong></p>
<p>如果原先没有聚集索引：</p>
<pre class="code"><span style="color: blue">CREATE CLUSTERED INDEX </span>[ClusteredIndex_on_TestScheme_634025229911990663] <span style="color: blue">ON </span>[dbo]<span style="color: gray">.</span>[Account]
<span style="color: gray">(
</span>[birthday]
<span style="color: gray">)</span><span style="color: blue">WITH </span><span style="color: gray">(</span><span style="color: blue">SORT_IN_TEMPDB </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">IGNORE_DUP_KEY </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">DROP_EXISTING </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">ONLINE </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">) </span><span style="color: blue">ON </span>[TestScheme]<span style="color: gray">(</span>[birthday]<span style="color: gray">)
</span><span style="color: blue">DROP INDEX </span>[ClusteredIndex_on_TestScheme_634025229911990663] <span style="color: blue">ON </span>[dbo]<span style="color: gray">.</span>[Account] <span style="color: blue">WITH </span><span style="color: gray">( </span><span style="color: blue">ONLINE </span><span style="color: gray">= </span><span style="color: blue">OFF </span><span style="color: gray">)
</span></pre>
<p>这和没有索引的情况一样，如果表原先存在聚集索引，则脚本变为：</p>
<pre class="code"><span style="color: blue">CREATE CLUSTERED INDEX </span>[IX_id] <span style="color: blue">ON </span>[dbo]<span style="color: gray">.</span>[Account]
<span style="color: gray">(
</span>[id] <span style="color: blue">ASC
</span><span style="color: gray">)</span><span style="color: blue">WITH </span><span style="color: gray">(</span><span style="color: blue">PAD_INDEX  </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">STATISTICS_NORECOMPUTE  </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">SORT_IN_TEMPDB </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">IGNORE_DUP_KEY </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">DROP_EXISTING </span><span style="color: gray">= </span><span style="color: blue">ON</span><span style="color: gray">, <br />
</span><span style="color: blue">ONLINE </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">ALLOW_ROW_LOCKS  </span><span style="color: gray">= </span><span style="color: blue">ON</span><span style="color: gray">, </span><span style="color: blue">ALLOW_PAGE_LOCKS  </span><span style="color: gray">= </span><span style="color: blue">ON</span><span style="color: gray">) </span><span style="color: blue">ON </span>[TestScheme]<span style="color: gray">(</span>[birthday]<span style="color: gray">)</span></pre>
<p>可以看到原有的聚集索引（IX_id）在分区方案上被重建了。</p>
<p>如果选择了&#8220;<strong>对齐索引</strong>&#8221;选项，则会对所有索引都应用分区：</p>
<pre class="code"><span style="color: blue">CREATE CLUSTERED INDEX </span>[IX_id] <span style="color: blue">ON </span>[dbo]<span style="color: gray">.</span>[Account]
<span style="color: gray">(
</span>[id] <span style="color: blue">ASC
</span><span style="color: gray">)</span><span style="color: blue">WITH </span><span style="color: gray">(</span><span style="color: blue">PAD_INDEX  </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">STATISTICS_NORECOMPUTE  </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">SORT_IN_TEMPDB </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">IGNORE_DUP_KEY </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">DROP_EXISTING </span><span style="color: gray">= </span><span style="color: blue">ON</span><span style="color: gray">, <br />
</span><span style="color: blue">ONLINE </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">ALLOW_ROW_LOCKS  </span><span style="color: gray">= </span><span style="color: blue">ON</span><span style="color: gray">, </span><span style="color: blue">ALLOW_PAGE_LOCKS  </span><span style="color: gray">= </span><span style="color: blue">ON</span><span style="color: gray">) </span><span style="color: blue">ON </span>[TestScheme]<span style="color: gray">(</span>[birthday]<span style="color: gray">)
</span><span style="color: blue">CREATE NONCLUSTERED INDEX </span>[UIX_birthday] <span style="color: blue">ON </span>[dbo]<span style="color: gray">.</span>[Account]
<span style="color: gray">(
</span>[birthday] <span style="color: blue">ASC
</span><span style="color: gray">)</span><span style="color: blue">WITH </span><span style="color: gray">(</span><span style="color: blue">PAD_INDEX  </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">STATISTICS_NORECOMPUTE  </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">SORT_IN_TEMPDB </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">IGNORE_DUP_KEY </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">DROP_EXISTING </span><span style="color: gray">= </span><span style="color: blue">ON</span><span style="color: gray">, <br />
</span><span style="color: blue">ONLINE </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">ALLOW_ROW_LOCKS  </span><span style="color: gray">= </span><span style="color: blue">ON</span><span style="color: gray">, </span><span style="color: blue">ALLOW_PAGE_LOCKS  </span><span style="color: gray">= </span><span style="color: blue">ON</span><span style="color: gray">) </span><span style="color: blue">ON </span>[TestScheme]<span style="color: gray">(</span>[birthday]<span style="color: gray">)
</span><span style="color: blue">CREATE NONCLUSTERED INDEX </span>[UIX_name] <span style="color: blue">ON </span>[dbo]<span style="color: gray">.</span>[Account]
<span style="color: gray">(
</span>[name] <span style="color: blue">ASC
</span><span style="color: gray">)</span><span style="color: blue">WITH </span><span style="color: gray">(</span><span style="color: blue">PAD_INDEX  </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">STATISTICS_NORECOMPUTE  </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">SORT_IN_TEMPDB </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">IGNORE_DUP_KEY </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">DROP_EXISTING </span><span style="color: gray">= </span><span style="color: blue">ON</span><span style="color: gray">, <br />
</span><span style="color: blue">ONLINE </span><span style="color: gray">= </span><span style="color: blue">OFF</span><span style="color: gray">, </span><span style="color: blue">ALLOW_ROW_LOCKS  </span><span style="color: gray">= </span><span style="color: blue">ON</span><span style="color: gray">, </span><span style="color: blue">ALLOW_PAGE_LOCKS  </span><span style="color: gray">= </span><span style="color: blue">ON</span><span style="color: gray">)</span></pre>
<a href="http://11011.net/software/vspaste"></a>
<p>这里不仅对聚集索引IX_id进行了分区，也对非聚集索引UIX_name和UIX_birthday进行了分区。</p>
<h1>注意事项</h1>
<ol>
    <li>对一张表分好区后不可以进行再次分区，同时也<strong>没有直接取消表分区的方法</strong>。 </li>
    <li>如果要查看已分区表的分区状态以及每个分区中的行数和占用空间，可以通过Storage-》Management Compression查看。同时可以在这里为每个分区指定压缩方式。 </li>
    <li><strong>如果分区表索引没有对齐</strong><strong>，则不可以对该表进行切入切出（Switch in/out）操作，同样也不能执行滑动窗口操作</strong>。 </li>
    <li>分区实际上是在每个分区表都添加了约束，相应的插入操作的性能也会受到影响。 </li>
    <li>即使进行了分区，如果查询的条件字段和分区列并没有关联，性能也未必会得到提升。 </li>
</ol>
<h1>附：对分区并行查询的说明</h1>
<p>由于我在实际操作中主要考虑并行查询方面的效率，所以文章里只是略略带过，但评论中有人提到，所以摘录整理一些资料在下面：</p>
<ol>
    <li>并行查询肯定需要多核支持，单核下并行是不可能的。 </li>
    <li>在2005中，如果有两个以上的Partition，一个线程对应一个Partition，所以如果有10个线程，却只有3个分区的话，就会有7个线程被浪费。 </li>
    <li>在2008中，这一问题被改进，所有的线程都被投入到所有的Partition中。具体可以参看<a title="http://sqlblog.com/blogs/erin_welker/archive/2008/02/10/partitioning-enhancements-in-sql-server-2008.aspx" href="http://sqlblog.com/blogs/erin_welker/archive/2008/02/10/partitioning-enhancements-in-sql-server-2008.aspx">Partitioning enhancements in SQL Server 2008</a>。 </li>
</ol>
</div>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/348634.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2011-04-20 15:54 <a href="http://www.blogjava.net/wangxinsh55/archive/2011/04/20/348634.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server 2005 中实现通用的异步触发器架构  </title><link>http://www.blogjava.net/wangxinsh55/archive/2008/03/11/185254.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Tue, 11 Mar 2008 01:38:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2008/03/11/185254.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/185254.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2008/03/11/185254.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/185254.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/185254.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在SQL Server 2005中，通过新增的Service Broker可以实现异步触发器的处理功能。本文提供一种使用Service Broker实现的通用异步触发器方法。在本方法中，通过Service Broker构造异步触发器处理架构，对于要使用这种架构的表，只需要创建相应的触发器及处理触发器中数据的存储过程，并且在异步触发器架构中登记触发器和处理的存储过程即可。如果一个触发器中的数据要...&nbsp;&nbsp;<a href='http://www.blogjava.net/wangxinsh55/archive/2008/03/11/185254.html'>阅读全文</a><img src ="http://www.blogjava.net/wangxinsh55/aggbug/185254.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2008-03-11 09:38 <a href="http://www.blogjava.net/wangxinsh55/archive/2008/03/11/185254.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server 中出现"帐户名与安全标识间无任何映射完成"</title><link>http://www.blogjava.net/wangxinsh55/archive/2007/08/09/135557.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 09 Aug 2007 09:19:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/08/09/135557.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/135557.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/08/09/135557.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/135557.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/135557.html</trackback:ping><description><![CDATA[看了一下事件查看器：有N个来源为Scecli的警告事件信息，内容如下：<br>安全策略已传播，但有警告信息。 0x534 : 帐户名与安全标识间无任何映射完成。<br><br>有关此问题的高级帮助可以在 <a href="http://support.microsoft.com/" target=_blank><font color=#000000>http://support.microsoft.com/</font></a> 找到。<br>查询 "troubleshooting 1202 events"。<br><br>当在一个或多个组策略对象(GPO)中的用户帐户不能解析为一个 SID 时发生错误 0x534。导致此错误的原因可能是在用户权限或一个 GPO 的受限制的组分支中引用的用户帐户键入错误或已被删除。要解析此事件，请联系域的管理员，执行下列操作: <br><br>1.&nbsp; &nbsp; &nbsp; &nbsp; 识别不能解析为一个 SID 的帐户:<br><br>在命令行中，键入: FIND /I "Cannot find"&nbsp;&nbsp;%SYSTEMROOT%\Security\Logs\winlogon.log<br><br>在 FIND 的输出中，"Cannot find" 后面的字符串就是有问题的帐户名。<br><br>示例: Cannot find JohnDough。<br><br>在这种情况下，用户名 "JohnDough" 的 SID 不能确定。这通常是因为帐户已经被删除，被重命名，或拼写错误(例如，"JohnDoe")。<br><br>2.&nbsp; &nbsp; &nbsp; &nbsp; 用 RSoP 来识别特定的用户权限，受限制的组，和饱含有问题帐户的源 GPO:<br><br>a.&nbsp; &nbsp; &nbsp; &nbsp; 开始 -&gt; 运行 -&gt; RSoP.msc<br>b.&nbsp; &nbsp; &nbsp; &nbsp; 查看&#8220;计算机配置\Windows 设置\安全设置\本地策略\用户权限分配&#8221;和&#8220;计算机配置\Windows 设置\安全设置\本地策略\受限制的组&#8221;的结果，查找用红色的 X 标记的错误。<br>c.&nbsp; &nbsp; &nbsp; &nbsp; 对于任何用红色的 X 标记的用户权限或受限制的组，包含有问题的策略的相应 GPO 在标题为&#8220;源 GPO&#8221;的列中列出。注意产生错误的特定用户权限，受限制的组和包含的源 GPO。<br><br>3.&nbsp; &nbsp; &nbsp; &nbsp; 从组策略中删除不能解析的帐户<br><br>a.&nbsp; &nbsp; &nbsp; &nbsp; 开始 -&gt; 运行 -&gt; MMC.EXE<br>b.&nbsp; &nbsp; &nbsp; &nbsp; 从&#8220;文件&#8221;菜单选择&#8220;添加/删除管理单元...&#8221;<br>c.&nbsp; &nbsp; &nbsp; &nbsp; 从&#8220;添加/删除管理单元&#8221;对话框选择&#8220;添加...&#8221;<br>d.&nbsp; &nbsp; &nbsp; &nbsp; 在&#8220;添加独立管理单元&#8221;对话框中选择&#8220;组策略对象编辑器&#8221;，然后单击&#8220;添加&#8221;<br>e.&nbsp; &nbsp; &nbsp; &nbsp; 在&#8220;选择组策略对象&#8221;对话框中，单击&#8220;浏览&#8221;按钮<br>f.&nbsp; &nbsp; &nbsp; &nbsp; 在&#8220;浏览组策略对象&#8221;对话框中，选择&#8220;全部&#8221;选项卡<br>g.&nbsp; &nbsp; &nbsp; &nbsp; 对于在步骤 2 中识别出的每一个源 GPO，更正在步骤 2 中用红色的 X 标出的特定用户权限或受限制的组。这些用户权限或受限制的组可以通过删除或更正到在步骤 1 中识别出的有问题帐户的引用来进行更正。<br><br>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/135557.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-08-09 17:19 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/08/09/135557.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>excel表的数据导入MSSQL数据库---缓冲区来讲太大  错误解决</title><link>http://www.blogjava.net/wangxinsh55/archive/2007/07/03/127921.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Tue, 03 Jul 2007 09:56:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/07/03/127921.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/127921.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/07/03/127921.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/127921.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/127921.html</trackback:ping><description><![CDATA[<p>在源的行号为&nbsp;&nbsp; 9 处出错。到目前为止，在该任务中遇到错误数: 1。 <br>&nbsp;&nbsp;&nbsp; 作为源列 86（&#8220;内容简介&#8221;）的数据对于所指定的缓冲区来讲太大。</p>
<p>&nbsp;&nbsp;&nbsp; 解决办法：</p>
<p>&nbsp;&nbsp;&nbsp; 修改服务器的注册表： HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Jet/4.0/Engines/Excel 下双击右边的"TypeGuessRows"选项，将"数值数据"改成0。 原因是：将excel表的数据导入数据库的时候，Jet引擎根据"TypeGuessRows"选项的值所代表的行数判断内容的数据类型，默认是根据前8行的内容判断数据类型，修改成0后，它会对每行的内容进行判断，不过这样做会影响性能。<br></p>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/127921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-07-03 17:56 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/07/03/127921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL SERVER 临时表与表变量</title><link>http://www.blogjava.net/wangxinsh55/archive/2006/09/28/72574.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 28 Sep 2006 06:21:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2006/09/28/72574.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/72574.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2006/09/28/72574.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/72574.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/72574.html</trackback:ping><description><![CDATA[<p>
<strong>
<font style="background-color: rgb(255, 255, 102);">SQL</font>
</strong> SERVER的<strong style="color: black; background-color: rgb(160, 255, 255);">临时表</strong>有本地<strong style="color: black; background-color: rgb(160, 255, 255);">临时表</strong>和全局<strong style="color: black; background-color: rgb(160, 255, 255);">临时表</strong>之分，在联机丛书中这样描述：</p>
<div>&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有本地和全局两种类型的<strong style="color: black; background-color: rgb(160, 255, 255);">临时表</strong>，二者在名称、可见性和可用性上均不相同。本地<strong style="color: black; background-color: rgb(160, 255, 255);">临时表</strong>的名称以单个数字符号 (#) 打头；它们仅对当前的用户连接是可见的；当用户从 Microsoft&#174; <strong style="color: black; background-color: rgb(255, 255, 102);">SQL</strong> Server&#8482; 2000 实例断开连接时被删除。全局<strong style="color: black; background-color: rgb(160, 255, 255);">临时表</strong>的名称以数学符号 (##) 打头，创建后对任何用户都是可见的，当所有引用该表的用户从 <strong style="color: black; background-color: rgb(255, 255, 102);">SQL</strong> Server 断开连接时被删除。</div>
<p>
<br />
在存储过程中创建的本地<strong style="color: black; background-color: rgb(160, 255, 255);">临时表</strong>，相当于存储过程的变量，只在存储过程内可见，而在前台程序中创建的本地<strong style="color: black; background-color: rgb(160, 255, 255);">临时表</strong>，就和微软联机丛书中所写的一样，是对当前的用户连接可见。了解了这些，可以在不同场合不同需求下使用不同的方法来创建本地<strong style="color: black; background-color: rgb(160, 255, 255);">临时表</strong>，这样，会使<strong style="color: black; background-color: rgb(160, 255, 255);">临时表</strong>发挥它最大的用处。<br />
<br />
<br />
/*****************表变量********************/<br />
declare @t table(<br />
&nbsp;cataid int<br />
)</p>
<p>insert into @t select a.cataid from f_getchlid(27,'5961051') a <br />
select top 10 favorites.*,multicata.cataname <br />
from favorites left outer join multicata on favorites.cataid=multicata.cataid <br />
where favorites.userid='5961051' and favorites.cataid in (<br />
&nbsp;select * from @t)<br />
<br />
<br />
/****************临时表************************/<br />
方法一、<br />
select a.cataid into #t from f_getchlid(27,'5961051') a <br />
select top 10 favorites.*,multicata.cataname <br />
from favorites left outer join multicata on favorites.cataid=multicata.cataid <br />
where favorites.userid='5961051' and favorites.cataid in (<br />
&nbsp;select * from #t)<br />
drop table #t<br />
<br />
<br />
方法二、<br />
create table #t (<br />
&nbsp;cataid int<br />
)<br />
insert into #t select a.cataid from zhaoguoguang.f_getchlid(27,'5961051') a <br />
select top 10 favorites.*,multicata.cataname <br />
from favorites left outer join multicata on favorites.cataid=multicata.cataid <br />
where favorites.userid='5961051' and favorites.cataid in (<br />
&nbsp;select * from #t)<br />
drop table #t</p>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/72574.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2006-09-28 14:21 <a href="http://www.blogjava.net/wangxinsh55/archive/2006/09/28/72574.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Transact_SQL小手册</title><link>http://www.blogjava.net/wangxinsh55/archive/2006/03/30/38232.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 30 Mar 2006 04:53:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2006/03/30/38232.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/38232.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2006/03/30/38232.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/38232.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/38232.html</trackback:ping><description><![CDATA[
		<span id="ArticleContent1_ArticleContent1_lblContent">  
<p class="postText"><span>*******************Transact_SQL********************</span></p><p class="postText">--语 句                                功 能<br />--数据操作<br />SELECT      --从数据库表中检索数据行和列<br />INSERT      --向数据库表添加新数据行<br />DELETE      --从数据库表中删除数据行<br />UPDATE      --更新数据库表中的数据<br />--数据定义<br />CREATE TABLE    --创建一个数据库表<br />DROP TABLE     --从数据库中删除表<br />ALTER TABLE     --修改数据库表结构<br />CREATE VIEW     --创建一个视图<br />DROP VIEW     --从数据库中删除视图<br />CREATE INDEX    --为数据库表创建一个索引<br />DROP INDEX     --从数据库中删除索引<br />CREATE PROCEDURE   --创建一个存储过程<br />DROP PROCEDURE    --从数据库中删除存储过程<br />CREATE TRIGGER    --创建一个触发器<br />DROP TRIGGER    --从数据库中删除触发器<br />CREATE SCHEMA    --向数据库添加一个新模式<br />DROP SCHEMA     --从数据库中删除一个模式<br />CREATE DOMAIN    --创建一个数据值域<br />ALTER DOMAIN    --改变域定义<br />DROP DOMAIN     --从数据库中删除一个域<br />--数据控制<br />GRANT      --授予用户访问权限<br />DENY      --拒绝用户访问<br />REVOKE      --解除用户访问权限<br />--事务控制<br />COMMIT      --结束当前事务<br />ROLLBACK     --中止当前事务<br />SET TRANSACTION    --定义当前事务数据访问特征<br />--程序化SQL<br />DECLARE      --为查询设定游标<br />EXPLAN      --为查询描述数据访问计划<br />OPEN      --检索查询结果打开一个游标<br />FETCH      --检索一行查询结果<br />CLOSE      --关闭游标<br />PREPARE      --为动态执行准备SQL 语句<br />EXECUTE      --动态地执行SQL 语句<br />DESCRIBE     --描述准备好的查询</p><p class="postText">---局部变量<br />declare @id char(10)<br />--set @id = '10010001'<br />select @id = '10010001'</p><p class="postText">---全局变量<br />---必须以@@开头</p><p class="postText">--IF ELSE<br />declare @x int @y int @z int<br />select @x = 1 @y = 2 @z=3<br />if @x &gt; @y<br /> print 'x &gt; y' --打印字符串'x &gt; y'<br />else if @y &gt; @z<br /> print 'y &gt; z'<br />else print 'z &gt; y'</p><p class="postText">--CASE<br />use pangu<br />update employee<br />set e_wage =<br /> case<br />  when job_level = ’1’ then e_wage*1.08<br />  when job_level = ’2’ then e_wage*1.07<br />  when job_level = ’3’ then e_wage*1.06<br />  else e_wage*1.05<br /> end</p><p class="postText">--WHILE CONTINUE BREAK<br />declare @x int @y int @c int<br />select @x = 1 @y=1<br />while @x &lt; 3<br /> begin<br />  print @x --打印变量x 的值<br />  while @y &lt; 3<br />   begin<br />    select @c = <a href="mailto:100*@x">100*@x</a> + @y<br />    print @c --打印变量c 的值<br />    select @y = @y + 1<br />   end<br />  select @x = @x + 1<br />  select @y = 1<br /> end</p><p class="postText">--WAITFOR<br />--例 等待1 小时2 分零3 秒后才执行SELECT 语句<br />waitfor delay ’01:02:03’<br />select * from employee<br />--例 等到晚上11 点零8 分后才执行SELECT 语句<br />waitfor time ’23:08:00’<br />select * from employee</p><p class="postText"> </p><p class="postText">***SELECT***</p><p class="postText">   select *(列名) from table_name(表名) where column_name operator value<br />   ex:(宿主)<br />  select * from stock_information where stockid   = str(nid)<br />     stockname = 'str_name' <br />     stockname like '% find this %' <br />     stockname like '[a-zA-Z]%' --------- ([]指定值的范围)<br />     stockname like '[^F-M]%'   --------- (^排除指定范围)<br />     --------- 只能在使用like关键字的where子句中使用通配符)<br />     or stockpath = 'stock_path'<br />     or stocknumber &lt; 1000<br />     and stockindex = 24<br />     not stocksex = 'man'<br />     stocknumber between 20 and 100<br />     stocknumber in(10,20,30)<br />     order by stockid desc(asc) --------- 排序，desc-降序，asc-升序<br />     order by 1,2 --------- by列号<br />     stockname = (select stockname from stock_information  where stockid  = 4)<br />     --------- 子查询<br />     --------- 除非能确保内层select只返回一个行的值，<br />     --------- 否则应在外层where子句中用一个in限定符<br />  select distinct column_name form table_name --------- distinct指定检索独有的列值，不重复<br />  select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name<br />  select stockname , "stocknumber" = count(*) from table_name group by stockname<br />                                      --------- group by 将表按行分组,指定列中有相同的值<br />          having count(*) = 2  ---------  having选定指定的组<br />        <br />  select * <br />  from table1, table2                  <br />  where table1.id *= table2.id -------- 左外部连接，table1中有的而table2中没有得以null表示<br />     table1.id =* table2.id -------- 右外部连接 </p><p class="postText">  select stockname from table1<br />  union [all]  -----  union合并查询结果集，all-保留重复行<br />  select stockname from table2</p><p class="postText">***insert***</p><p class="postText">  insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")<br />              value (select Stockname , Stocknumber from Stock_table2)---value为select语句</p><p class="postText">***update***</p><p class="postText">  update table_name set Stockname = "xxx" [where Stockid = 3]<br />         Stockname = default<br />         Stockname = null<br />         Stocknumber = Stockname + 4</p><p class="postText">***delete***</p><p class="postText">  delete from table_name where Stockid = 3<br />  truncate table_name ----------- 删除表中所有行，仍保持表的完整性<br />  drop table table_name --------------- 完全删除表</p><p class="postText">***alter table*** --- 修改数据库表结构</p><p class="postText">  alter table database.owner.table_name add column_name char(2) null .....<br />  sp_help table_name ---- 显示表已有特征<br />  create table table_name (name char(20), age smallint, lname varchar(30))<br />  insert into table_name select ......... ----- 实现删除列的方法（创建新表）<br />  alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束<br />    <br />***function(/*常用函数*/)***</p><p class="postText">----统计函数----<br />AVG    --求平均值<br />COUNT   --统计数目<br />MAX    --求最大值<br />MIN    --求最小值<br />SUM    --求和</p><p class="postText">--AVG<br />use pangu<br />select avg(e_wage) as dept_avgWage<br />from employee<br />group by dept_id</p><p class="postText">--MAX<br />--求工资最高的员工姓名<br />use pangu<br />select e_name<br />from employee<br />where e_wage =<br /> (select max(e_wage)<br />  from employee)</p><p class="postText">--STDEV()<br />--STDEV()函数返回表达式中所有数据的标准差</p><p class="postText">--STDEVP()<br />--STDEVP()函数返回总体标准差</p><p class="postText">--VAR()<br />--VAR()函数返回表达式中所有值的统计变异数</p><p class="postText">--VARP()<br />--VARP()函数返回总体变异数</p><p class="postText">----算术函数----</p><p class="postText">/***三角函数***/<br />SIN(float_expression) --返回以弧度表示的角的正弦<br />COS(float_expression) --返回以弧度表示的角的余弦<br />TAN(float_expression) --返回以弧度表示的角的正切<br />COT(float_expression) --返回以弧度表示的角的余切<br />/***反三角函数***/<br />ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角<br />ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角<br />ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角<br />ATAN2(float_expression1,float_expression2) <br />        --返回正切是float_expression1 /float_expres-sion2的以弧度表示的角<br />DEGREES(numeric_expression)<br />                       --把弧度转换为角度返回与表达式相同的数据类型可为<br />        --INTEGER/MONEY/REAL/FLOAT 类型<br />RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为<br />        --INTEGER/MONEY/REAL/FLOAT 类型<br />EXP(float_expression)  --返回表达式的指数值<br />LOG(float_expression)  --返回表达式的自然对数值<br />LOG10(float_expression)--返回表达式的以10 为底的对数值<br />SQRT(float_expression) --返回表达式的平方根<br />/***取近似值函数***/<br />CEILING(numeric_expression)  --返回&gt;=表达式的最小整数返回的数据类型与表达式相同可为<br />        --INTEGER/MONEY/REAL/FLOAT 类型<br />FLOOR(numeric_expression)    --返回&lt;=表达式的最小整数返回的数据类型与表达式相同可为<br />        --INTEGER/MONEY/REAL/FLOAT 类型<br />ROUND(numeric_expression)    --返回以integer_expression 为精度的四舍五入值返回的数据<br />        --类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型<br />ABS(numeric_expression)      --返回表达式的绝对值返回的数据类型与表达式相同可为<br />        --INTEGER/MONEY/REAL/FLOAT 类型<br />SIGN(numeric_expression)     --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型<br />        --与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型<br />PI()       --返回值为π 即3.1415926535897936<br />RAND([integer_expression])   --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数</p><p class="postText"><br />----字符串函数----<br />ASCII()         --函数返回字符表达式最左端字符的ASCII 码值<br />CHAR()   --函数用于将ASCII 码转换为字符<br />    --如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值<br />LOWER()   --函数把字符串全部转换为小写<br />UPPER()   --函数把字符串全部转换为大写<br />STR()   --函数把数值型数据转换为字符型数据<br />LTRIM()   --函数把字符串头部的空格去掉<br />RTRIM()   --函数把字符串尾部的空格去掉<br />LEFT(),RIGHT(),SUBSTRING()  --函数返回部分字符串<br />CHARINDEX(),PATINDEX()  --函数返回字符串中某个指定的子串出现的开始位置<br />SOUNDEX()  --函数返回一个四位字符码 <br />    --SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值     <br />DIFFERENCE()    --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异<br />    --0 两个SOUNDEX 函数返回值的第一个字符不同<br />    --1 两个SOUNDEX 函数返回值的第一个字符相同<br />    --2 两个SOUNDEX 函数返回值的第一二个字符相同<br />    --3 两个SOUNDEX 函数返回值的第一二三个字符相同<br />    --4 两个SOUNDEX 函数返回值完全相同<br />                                       </p><p class="postText">QUOTENAME()  --函数返回被特定字符括起来的字符串<br />/*select quotename('abc', '{') quotename('abc')<br />运行结果如下<br />----------------------------------{<br />{abc} [abc]*/</p><p class="postText">REPLICATE()     --函数返回一个重复character_expression 指定次数的字符串<br />/*select replicate('abc', 3) replicate( 'abc', -2)<br />运行结果如下<br />----------- -----------<br />abcabcabc NULL*/</p><p class="postText">REVERSE()       --函数将指定的字符串的字符排列顺序颠倒<br />REPLACE()       --函数返回被替换了指定子串的字符串<br />/*select replace('abc123g', '123', 'def')<br />运行结果如下<br />----------- -----------<br />abcdefg*/</p><p class="postText">SPACE()   --函数返回一个有指定长度的空白字符串<br />STUFF()   --函数用另一子串替换字符串指定位置长度的子串</p><p class="postText"><br />----数据类型转换函数----<br />CAST() 函数语法如下<br />CAST() (&lt;expression&gt; AS &lt;data_ type&gt;[ length ])<br />CONVERT() 函数语法如下<br />CONVERT() (&lt;data_ type&gt;[ length ], &lt;expression&gt; [, style])</p><p class="postText">select cast(100+99 as char) convert(varchar(12), getdate())<br />运行结果如下<br />------------------------------ ------------<br />199   Jan 15 2000</p><p class="postText">----日期函数----<br />DAY()   --函数返回date_expression 中的日期值<br />MONTH()   --函数返回date_expression 中的月份值<br />YEAR()   --函数返回date_expression 中的年份值<br />DATEADD(&lt;datepart&gt; ,&lt;number&gt; ,&lt;date&gt;) <br />    --函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期<br />DATEDIFF(&lt;datepart&gt; ,&lt;number&gt; ,&lt;date&gt;)<br />    --函数返回两个指定日期在datepart 方面的不同之处<br />DATENAME(&lt;datepart&gt; , &lt;date&gt;)  --函数以字符串的形式返回日期的指定部分<br />DATEPART(&lt;datepart&gt; , &lt;date&gt;)  --函数以整数值的形式返回日期的指定部分<br />GETDATE()  --函数以DATETIME 的缺省格式返回系统当前的日期和时间</p><p class="postText">----系统函数----<br />APP_NAME()      --函数返回当前执行的应用程序的名称<br />COALESCE()  --函数返回众多表达式中第一个非NULL 表达式的值<br />COL_LENGTH(&lt;'table_name'&gt;, &lt;'column_name'&gt;) --函数返回表中指定字段的长度值<br />COL_NAME(&lt;table_id&gt;, &lt;column_id&gt;)   --函数返回表中指定字段的名称即列名<br />DATALENGTH() --函数返回数据表达式的数据的实际长度<br />DB_ID(['database_name']) --函数返回数据库的编号<br />DB_NAME(database_id)  --函数返回数据库的名称<br />HOST_ID()     --函数返回服务器端计算机的名称<br />HOST_NAME()     --函数返回服务器端计算机的名称<br />IDENTITY(&lt;data_type&gt;[, seed increment]) [AS column_name])<br /> --IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中<br />/*select identity(int, 1, 1) as column_name<br /> into newtable<br /> from oldtable*/<br />ISDATE()  --函数判断所给定的表达式是否为合理日期<br />ISNULL(&lt;check_expression&gt;, &lt;replacement_value&gt;) --函数将表达式中的NULL 值用指定值替换<br />ISNUMERIC()  --函数判断所给定的表达式是否为合理的数值<br />NEWID()   --函数返回一个UNIQUEIDENTIFIER 类型的数值<br />NULLIF(&lt;expression1&gt;, &lt;expression2&gt;)<br /> --NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值</p></span>
		<br />
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/38232.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2006-03-30 12:53 <a href="http://www.blogjava.net/wangxinsh55/archive/2006/03/30/38232.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>