﻿<?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-280211429-文章分类-sqlserver</title><link>http://www.blogjava.net/280211429/category/13192.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 18:16:12 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 18:16:12 GMT</pubDate><ttl>60</ttl><item><title>SQL Server的数据类型 </title><link>http://www.blogjava.net/280211429/articles/58692.html</link><dc:creator>国强</dc:creator><author>国强</author><pubDate>Tue, 18 Jul 2006 01:57:00 GMT</pubDate><guid>http://www.blogjava.net/280211429/articles/58692.html</guid><wfw:comment>http://www.blogjava.net/280211429/comments/58692.html</wfw:comment><comments>http://www.blogjava.net/280211429/articles/58692.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/280211429/comments/commentRss/58692.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/280211429/services/trackbacks/58692.html</trackback:ping><description><![CDATA[
		<div class="posttitle"> </div>
		<div class="postcontent">
				<h3>SQL Server支持的数据类型</h3>
				<table cellspacing="0" cellpadding="1" width="100%" border="1">
						<tbody>
								<tr>
										<th align="left" width="26%">
												<font class="90v">数据类型<br /></font>
										</th>
										<th align="left" width="74%">
												<font class="90v">说明<br /></font>
										</th>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">BIGINT</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据（整数）。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">INT</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">从 -2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647) 的整型数据（整数）。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">SMALLINT</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">从 2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">TINYINT</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">从 0 到 255 的整型数据。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">BIT</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">非 1 即 0 的整型数据。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">DECIMAL</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">从 -10^38 +1 到 10^38 -1 的固定精度和标度的数字数据。 </font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">NUMERIC</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">功能上相当于<b>十进制数。</b></font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">MONEY</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">从 -2^63 (-922,337,203,685,477.5808) 到 2^63 - 1 (+922,337,203,685,477.5807) 的货币型数据，精确到货币单位的万分之一。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">SMALLMONEY</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">从 -214,748.3648 到 +214,748.3647 的货币型数据，精确到货币单位的万分之一。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">FLOAT</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">从 -1.79E + 308 到 1.79E + 308 的浮点精度数字数据。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">REAL</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">从 -3.40E + 38 到 3.40E + 38 的浮点精度数字数据。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">DATETIME</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间数据，精确到三百分之一秒（3.33 毫秒）。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">SMALLDATETIME</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间数据，精确到一分钟。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">CHAR</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">最大长度 8000 个字符的固定长度非 Unicode 字符数据。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">VARCHAR</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">最大长度 8000 个字符的可变长度非 Unicode 字符数据。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">TEXT</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">最大长度 2^31 - 1 (2,147,483,647) 个字符的可变长度非 Unicode 数据。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">NCHAR</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">最大长度 4,000 个字符的固定长度 Unicode 数据。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">NVARCHAR</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">最大长度 4000 个字符的可变长度 Unicode 数据。<b>sysname </b>是系统提供的用户定义数据类型，功能上相当于 <b>nvarchar(128)</b>，用于引用数据库对象名称。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">NTEXT</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">最大长度 2^31 - 1 (1,073,741,823) 个字符的可变长度 Unicode 数据。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">BINARY</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">最大长度 8,000 个字节的固定长度二进制数据。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">VARBINARY</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">最大长度 8,000 个字节的可变长度二进制数据。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">IMAGE</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">最大长度 2^31 - 1 (2,147,483,647) 字节的可变长度二进制数据。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">CURSOR</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">对光标的引用。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">SQL_VARIANT</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">存储 SQL Server 支持的数据类型（<b>text</b>、<b>ntext</b>、<b>timestamp</b> 和 <b>sql_variant</b> 除外）值的数据类型。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">TABLE</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">用于存储结果集合供以后处理的特殊数据类型。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">TIMESTAMP</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">整个数据库中都唯一的一个数字，随着行的每次更新而更新。</font>
										</td>
								</tr>
								<tr>
										<td valign="top" width="26%">
												<font class="90v">UNIQUEIDENTIFIER</font>
										</td>
										<td valign="top" width="74%">
												<font class="90v">全局唯一标识符 (GUID)。</font>
										</td>
								</tr>
						</tbody>
				</table>
				<br />
				<p>
						<b>(1)二进制数据类型</b>
				</p>　　 二进制数据包括 <b>Binary、Varbinary 和 Image</b><br />　　 Binary 数据类型既可以是固定长度的(Binary),也可以是变长度的。<br />　　 Binary[(n)] 是 n 位固定的二进制数据。其中，n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4 个字节。<br />　　 Varbinary[(n)] 是 n 位变长度的二进制数据。其中，n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4个字节，不是n 个字节。<br />　　 在 Image 数据类型中存储的数据是以位字符串存储的，不是由 SQL Server 解释的，必须由应用程序来解释。例如，应用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把数据存储在 Image 数据类型中。 
<p><b>(2)字符数据类型</b></p>　　 字符数据的类型包括 <b>Char，Varchar 和 Text</b><br />　　 字符数据是由任何字母、符号和数字任意组合而成的数据。<br />　　 Varchar 是变长字符数据，其长度不超过 8KB。Char 是定长字符数据，其长度最多为 8KB。超过 8KB 的ASCII 数据可以使用Text数据类型存储。例如，因为 Html 文档全部都是 ASCII 字符，并且在一般情况下长度超过 8KB，所以这些文档可以 Text 数据类型存储在SQL Server 中。 
<p><b>(3)Unicode 数据类型</b></p>　　 Unicode 数据类型包括 <b>Nchar,Nvarchar 和Ntext</b><br />　　 在 Microsoft SQL Server 中，传统的非 Unicode 数据类型允许使用由特定字符集定义的字符。在 SQL Server安装过程中，允许选择一种字符集。使用 Unicode 数据类型，列中可以存储任何由Unicode 标准定义的字符。在 Unicode 标准中，包括了以各种字符集定义的全部字符。使用Unicode数据类型，所战胜的窨是使用非 Unicode 数据类型所占用的窨大小的两倍。 <br />　　 在 SQL Server 中，Unicode 数据以 Nchar、Nvarchar 和 Ntext 数据类型存储。使用这种字符类型存储的列可以存储多个字符集中的字符。当列的长度变化时，应该使用Nvarchar 字符类型，这时最多可以存储 4000 个字符。当列的长度固定不变时，应该使用 Nchar 字符类型，同样，这时最多可以存储4000 个字符。当使用 Ntext 数据类型时，该列可以存储多于 4000 个字符。 
<p><b>(4)日期和时间数据类型</b></p>　　 日期和时间数据类型包括 <b>Datetime 和 Smalldatetime</b>两种类型<br />　　 日期和时间数据类型由有效的日期和时间组成。例如，有效的日期和时间数据包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一个数据类型是日期在前，时间在后一个数据类型是霎时间在前，日期在后。在 Microsoft SQL Server中，日期和时间数据类型包括Datetime 和 Smalldatetime 两种类型时，所存储的日期范围是从 1753 年 1 月 1 日开始，到9999 年12 月 31 日结束(每一个值要求 8 个存储字节)。使用 Smalldatetime 数据类型时，所存储的日期范围是 1900年 1 月 1日 开始，到 2079 年 12 月 31 日结束(每一个值要求 4 个存储字节)。<br />　　 日期的格式可以设定。设置日期格式的命令如下：<br />　　 Set DateFormat {format | @format _var|<br />　　 其中，format | @format_var 是日期的顺序。有效的参数包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默认情况下，日期格式为MDY。<br />　　 例如，当执行 Set DateFormat YMD 之后，日期的格式为年 月 日 形式；当执行 Set DateFormat DMY 之后，日期的格式为日 月有年 形式 
<p><b>（5）数字数据类型</b></p>　　 数字数据只包含数字。数字数据类型包括正数和负数、小数（浮点数）和整数<br />　　 整数由正整数和负整数组成，例如 39、25、0-2 和 33967。在 Micrsoft SQL Server 中，整数存储的数据类型是 　　<b> Int，Smallint和 Tinyint</b>。Int 数据类型存储数据的范围大于 Smallint 数据类型存储数据的范围，而 Smallint 据类型存储数据的范围大于Tinyint 数据类型存储数据的范围。使用 Int 数据狗昔存储数据的范围是从 -2 147 483 648 到 2 147 483 647（每一个值要求4个字节存储空间）。使用 Smallint 数据类型时，存储数据的范围从 -32 768 到 32 767（每一个值要求2个字节存储空间）。使用Tinyint 数据类型时，存储数据的范围是从0 到255（每一个值要求1个字节存储空间）。<br />　　 精确小娄数据在 SQL Server 中的数据类型是 Decimal 和 Numeric。这种数据所占的存储空间根据该数据的位数后的位数来确定。<br />　　 在SQL Server 中，近似小数数据的数据类型是 Float 和 Real。例如，三分之一这个分数记作。3333333，当使用近似数据类型时能准确表示。因此，从系统中检索到的数据可能与存储在该列中数据不完全一样。 
<p><b>（6）货币数据表示正的或者负的货币数量 。</b></p>　　 在 Microsoft SQL Server 中，货币数据的数据类型是<b>Money 和 Smallmoney</b><p>　　Money数据类型要求 8 个存储字节，Smallmoney 数据类型要求 4 个存储字节。 </p><p><b>（7）特殊数据类型</b></p>　　 特殊数据类型包括前面没有提过的数据类型。特殊的数据类型有3种，即 　　<b> Timestamp、Bit 和 Uniqueidentifier</b>。<br />　　 Timestamp 用于表示SQL Server 活动的先后顺序，以二进投影的格式表示。Timestamp 数据与插入数据或者日期和时间没有关系。<br />　　 Bit 由 1 或者 0 组成。当表示真或者假、ON 或者 OFF 时，使用 Bit 数据类型。例如，询问是否是每一次访问的客户机请求可以存储在这种数据类型的列中。<br />　　 Uniqueidentifier 由 16 字节的十六进制数字组成，表示一个全局唯一的。当表的记录行要求唯一时，GUID是非常有用。例如，在客户标识号列使用这种数据类型可以区别不同的客户。 
<p><b>2.用户定义的数据类型</b></p>　　 用户定义的数据类型基于在 Microsoft SQL Server 中提供的数据类型。当几个表中必须存储同一种数据类型时，并且为保证这些列有相同的数据类型、长度和可空性时，可以使用用户定义的数据类型。例如，可定义一种称为 　　postal_code 的数据类型，它基于 Char 数据类型。<br />　　 当创建用户定义的数据类型时，必须提供三个数：数据类型的名称、所基于的系统数据类型和数据类型的可空性。 
<p><b>（1）创建用户定义的数据类型</b></p>　　 创建用户定义的数据类型可以使用 Transact-SQL 语句。系统存储过程 sp_addtype 可以来创建用户定义的数据类型。其语法形式如下：<br />　　 sp_addtype {type},[,system_data_bype][,'null_type']<br />　　 其中，type 是用户定义的数据类型的名称。system_data_type 是系统提供的数据类型，例如 Decimal、Int、Char 　　等等。 null_type 表示该数据类型是如何处理空值的，必须使用单引号引起来，例如'NULL'、'NOT NULL'或者'NONULL'。<br />　　 例子：<br />　　 Use cust<br />　　 Exec sp_addtype ssn,'Varchar(11)',"Not Null'<br />　　 创建一个用户定义的数据类型 ssn，其基于的系统数据类型是变长为11 的字符，不允许空。<br />　　 例子：<br />　　 Use cust<br />　　 Exec sp_addtype birthday,datetime,'Null'<br />　　 创建一个用户定义的数据类型 birthday，其基于的系统数据类型是 DateTime，允许空。<br />　　 例子：<br />　　 Use master<br />　　 Exec sp_addtype telephone,'varchar(24),'Not Null'<br />　　 Eexc sp_addtype fax,'varchar(24)','Null' 　　创建两个数据类型，即 telephone 和 fax <br /><b>（2）删除用户定义的数据类型</b><p></p>　　 当用户定义的数据类型不需要时，可删除。删除用户定义的数据类型的命令是 sp_droptype {'type'}。<br />　　 例子：<br />　　 Use master<br />　　 Exec sp_droptype 'ssn'<br />　　 注意：当表中的列还正在使用用户定义的数据类型时，或者在其上面还绑定有默认或者规则时，这种用户定义的数据类型不能删除。 </div>
<img src ="http://www.blogjava.net/280211429/aggbug/58692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/280211429/" target="_blank">国强</a> 2006-07-18 09:57 <a href="http://www.blogjava.net/280211429/articles/58692.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server各种日期计算方法</title><link>http://www.blogjava.net/280211429/articles/58690.html</link><dc:creator>国强</dc:creator><author>国强</author><pubDate>Tue, 18 Jul 2006 01:55:00 GMT</pubDate><guid>http://www.blogjava.net/280211429/articles/58690.html</guid><wfw:comment>http://www.blogjava.net/280211429/comments/58690.html</wfw:comment><comments>http://www.blogjava.net/280211429/articles/58690.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/280211429/comments/commentRss/58690.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/280211429/services/trackbacks/58690.html</trackback:ping><description><![CDATA[
		<div class="posttitle"> </div>
		<div class="postcontent">通常，你需要获得当前日期和计算一些其他的日期，例如，你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割（年、月、日等），然后仅仅用分割出来的年、月、日等放在几个函数中计算出自己所需要的日期！在这篇文 章里，我将告诉你如何使用DATEADD和DATEDIFF函数来计算出在你的程序中可能你要用到的一些不同日期。  <br /><br />　　在使用本文中的例子之前，你必须注意以下的问题。大部分可能不是所有例子在不同的机器上执行的结果可能不一样，这完全由哪一天是一个星期的第一天这个设置决定。第一天（DATEFIRST）设定决定了你的系统使用哪一天作为一周的第一天。所有以下的例 子都是以星期天作为一周的第一天来建立，也就是第一天设置为7。假如你的第一天设置不一样，你可能需要调整这些例子，使它和不同的第一天设置相符合。你可以通过@@DATEFIRST函数来检查第一天设置。  <br />　　 <br />　　为了理解这些例子，我们先复习一下DATEDIFF和DATEADD函数。DATEDIFF函数计算两个日期之间的小时、天、周、月、年等时间间隔总数。DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期。要了解更多的DATEDI FF和DATEADD函数以及时间间隔可以阅读微软联机帮助。  <br />　　 <br />　　使用DATEDIFF和DATEADD函数来计算日期，和本来从当前日期转换到你需要的日期的考虑方法有点不同。你必须从时间间隔这个方面来考虑。比如，从当前日期到你要得到的日期之间有多少时间间隔，或者，从今天到某一天（比如1900-1-1）之间有多少时间间隔，等等。理解怎样着眼于时间间隔有助于你轻松的理解我的不同的日期计算例子。  <br />　　 <br />　　一个月的第一天  <br />　　 <br />　　第一个例子，我将告诉你如何从当前日期去这个月的最后一天。请注意：这个例子以及这篇文章中的其他例子都将只使用DATEDIFF和DATEADD函数来计算我们想要的日期。每一个例子都将通过计算但前的时间间隔，然后进行加减来得到想要计算的日期。  <br />　　 <br />　　这是计算一个月第一天的SQL 脚本：  <br />　　SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)  <br />　　 <br />　　我们把这个语句分开来看看它是如何工作的。最核心的函数是getdate()，大部分人都知道这个是返回当前的日期和时间的函数。下一个执行的函数 DATEDIFF(mm,0,getdate())是计算当前日期和“1900-01-01 00:00:00.000”这个日期之间的月数。记住：时期和时间变量和毫秒一样是从“1900-01-01 00:00:00.000”开始计算的。这就是为什么你可以在DATEDIFF函数中指定第一个时间表达式为“0”。下一个函数是DATEADD，增加当前日期到“1900-01-01”的月数。通过增加预定义的日期“1900-01-01”和当前日期的月数，我们可以获得这个月的第一天。另外，计算出来的日期的时间部分将会是“00:00:00.000”。  <br />　　 <br />　　这个计算的技巧是先计算当前日期到“1900-01-01”的时间间隔数，然后把它加到“1900-01-01”上来获得特殊的日期，这个技巧可以用来计算很多不同的日期。下一个例子也是用这个技巧从当前日期来产生不同的日期。 <br />本周的星期一  <br />　　 <br />　　这里我是用周(wk)的时间间隔来计算哪一天是本周的星期一。  <br />　　 <br />　　SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)  <br />　　 <br />　　一年的第一天  <br />　　 <br />　　现在用年(yy)的时间间隔来显示这一年的第一天。  <br />　　 <br />　　SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)  <br />　　 <br />　　季度的第一天  <br />　　 <br />　　假如你要计算这个季度的第一天，这个例子告诉你该如何做。  <br />　　 <br />　　SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)  <br />　　 <br />　　当天的半夜  <br />　　 <br />　　曾经需要通过getdate()函数为了返回时间值截掉时间部分，就会考虑到当前日期是不是在半夜。假如这样，这个例子使用DATEDIFF和DATEADD函数来获得半夜的时间点。  <br />　　 <br />　　SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)  <br />　　 <br />　　深入DATEDIFF和DATEADD函数计算  <br />　　 <br />　　你可以明白，通过使用简单的DATEDIFF和DATEADD函数计算，你可以发现很多不同的可能有意义的日期。  <br />　　 <br />　　目前为止的所有例子只是仅仅计算当前的时间和“1900-01-01”之间的时间间隔数量，然后把它加到“1900-01-01”的时间间隔上来计算出日期。假定你修改时间间隔的数量，或者使用不同的时间间隔来调用DATEADD函数，或者减去时间间隔而不是增加，那么通过这些小的调整你可以发现和多不同的日期。  <br />　　 <br />　　这里有四个例子使用另外一个DATEADD函数来计算最后一天来分别替换DATEADD函数前后两个时间间隔。  <br />上个月的最后一天  <br />　　 <br />　　这是一个计算上个月最后一天的例子。它通过从一个月的最后一天这个例子上减去3毫秒来获得。有一点要记住，在Sql Server中时间是精确到3毫秒。这就是为什么我需要减去3毫秒来获得我要的日期和时间。  <br />　　 <br />　　SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))  <br />　　 <br />　　计算出来的日期的时间部分包含了一个Sql Server可以记录的一天的最后时刻(“23:59:59:997”)的时间。  <br />　　 <br />　　去年的最后一天  <br />　　 <br />　　连接上面的例子，为了要得到去年的最后一天，你需要在今年的第一天上减去3毫秒。  <br />　　 <br />　　SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))  <br />　　 <br />　　本月的最后一天  <br />　　 <br />　　现在，为了获得本月的最后一天，我需要稍微修改一下获得上个月的最后一天的语句。修改需要给用DATEDIFF比较当前日期和“1900-01-01” 返回的时间间隔上加1。通过加1个月，我计算出下个月的第一天，然后减去3毫秒，这样就计算出了这个月的最后一天。这是计算本月最后一天的SQL脚本。  <br />　　 <br />　　SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))  <br />　　 <br />　　本年的最后一天 　　 <br />　　你现在应该掌握这个的做法，这是计算本年最后一天脚本  <br />　　 <br />　　SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))。  <br />　　 <br />　　本月的第一个星期一  <br />　　 <br />　　好了，现在是最后一个例子。这里我要计算这个月的第一个星期一。这是计算的脚本。  <br />　　 <br />　　select DATEADD(wk, DATEDIFF(wk,0,  <br />　　dateadd(dd,6-datepart(day,getdate()),getdate())  <br />　　), 0)  <br />　　 <br />　　在这个例子里，我使用了“本周的星期一”的脚本，并作了一点点修改。修改的部分是把原来脚本中“getdate()”部分替换成计算本月的第6天，在计算中用本月的第6天来替换当前日期使得计算可以获得这个月的第一个星期一。  <br />　　 <br />　　总结  <br />　　 <br />　　我希望这些例子可以在你用DATEADD和DATEDIFF函数计算日期时给你一点启发。通过使用这个计算日期的时间间隔的数学方法，我发现为了显示两个日期之间间隔的有用历法是有价值的。注意，这只是计算出这些日期的一种方法。要牢记，还有很多方法 可以得到相同的计算结果。假如你有其他的方法，那很不错，要是你没有，我希望这些例子可以给你一些启发，当你要用DATEADD和DATEDIFF函数计算你程序可能要用到的日期时。  <br />附录，其他日期处理方法  <br />　　 <br />　　1)去掉时分秒  <br />　　declare @ datetime  <br />　　set @ = getdate() --’2003-7-1 10:00:00’  <br />　　SELECT @,DATEADD(day, DATEDIFF(day,0,@), 0)  <br />　　 <br />　　2）显示星期几  <br />　　select datename(weekday,getdate())  <br />　　 <br />　　3）如何取得某个月的天数  <br />　　declare @m int  <br />　　set @m=2 --月份  <br />　　select datediff(day,’2003-’+cast(@m as varchar)+’-15’ ,’2003-’+cast(@m+1 as varchar)+’-15’)  <br />　　另外，取得本月天数  <br />　　select datediff(day,cast(month(GetDate()) as varchar)+’-’+cast(month(GetDate()) as varchar)+’-15’ ,cast(month(GetDate()) as varchar)+’-’+cast(month(GetDate())+1 as varchar)+’-15’)  <br />　　或者使用计算本月的最后一天的脚本，然后用DAY函数区最后一天  <br />　　SELECT Day(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)))  <br />　　 <br />　　4）判断是否闰年：  <br />　　SELECT case day(dateadd(mm, 2, dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)))) when 28 then ’平年’ else ’闰年’ end  <br />　　或者  <br />　　select case datediff(day,datename(year,getdate())+’-02-01’,dateadd(mm,1,datename(year,getdate())+’-02-01’))  <br />　　when 28 then ’平年’ else ’闰年’ end  <br />　　 <br />　　5）一个季度多少天  <br />　　declare @m tinyint,@time smalldatetime  <br />　　select @m=month(getdate())  <br />　　select @m=case when @m between 1 and 3 then 1  <br />　　when @m between 4 and 6 then 4  <br />　　when @m between 7 and 9 then 7  <br />　　else 10 end  <br />　　select @time=datename(year,getdate())+’-’+convert(varchar(10),@m)+’-01’  <br />　　select datediff(day,@time,dateadd(mm,3,@time)) </div>
<img src ="http://www.blogjava.net/280211429/aggbug/58690.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/280211429/" target="_blank">国强</a> 2006-07-18 09:55 <a href="http://www.blogjava.net/280211429/articles/58690.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用SQL SERVER 2000的全文检索功能 </title><link>http://www.blogjava.net/280211429/articles/58686.html</link><dc:creator>国强</dc:creator><author>国强</author><pubDate>Tue, 18 Jul 2006 01:48:00 GMT</pubDate><guid>http://www.blogjava.net/280211429/articles/58686.html</guid><wfw:comment>http://www.blogjava.net/280211429/comments/58686.html</wfw:comment><comments>http://www.blogjava.net/280211429/articles/58686.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/280211429/comments/commentRss/58686.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/280211429/services/trackbacks/58686.html</trackback:ping><description><![CDATA[步骤：<br /><br />1、  打开NorthWind数据库，右键Products表，选择“全文索引表”，“在表上定义全文索引”，为其创建全文目录。在“全文索引向导”中，选择你需要全文查询条件的列（可以是文本或图像），我们选择Productname和QuantityPerUnit列。然后下一步，输入一个新的目录proCatalog，点击下一步。在填充调度一项里，我们暂时不建立填充调度。接着“下一步”，全成全文索引向导。完成后，我们可以看到在“全文目录”里，多了一个全文目录proCatalog。右键proCatalog属性，可以看到其状态、表、调度情况。<br />2、  右键全文目录proCatalog， “启动完全填充”，系统会出现“全文目录填充成功启动”。<br />3、  这时，我们可以使用Transact-SQL进行全文检索了，我们使用CONTAINS、FREETEXT等谓词。如：<br /><br /><br />检索ProductName中，即包含b又包含c的所有列<br /><br />SELECT *<br /><br />FROM Products<br /><br />WHERE CONTAINS(ProductName, '"c*" and "b*" ')<br /><br /> <br /><br />检索ProductName中，即包含chai chang tofu之一的所有列<br /><br />SELECT *<br /><br />FROM Products<br /><br />WHERE FREETEXT(ProductName, 'chai chang tofu ')<br /><br /> <br /><br />我们还可以使用CONTAINSTABLE、FREETEXTTABLE等<br /><br /> <br /><br />4、  我们可以用.NET创建WEB或Form客户端，提供一个良好的全文检索界面，使自己的应用程序得到扩展<br /><br /> <br /><br /> <br /><br /> <br /><br />参考：<br />全文查询有关的系统存储过程<br /><br />（1）启动数据库的全文处理功能（sp_fulltext_datebase）； <br />（2）建立全文目录（sp_fulltext_catalog）； <br />（3）在全文目录中注册需要全文索引的表（sp_fulltext_table）； <br />（4）指出表中需要全文检索的列名（sp_fulltext_column） <br />（5）为表创建全文索引（sp_fulltext_table）； <br />（6）填充全文索引（sp_fulltext_catalog）。<br /><br /> <br /><br /> <br /><br /> <br /><br />全文查询支持<br /><br />Microsoft&amp;reg; SQL Server&amp;#8482; 2000 在接收带全文构造的 Transact-SQL 语句时，使用全文提供程序从 Microsoft 搜索服务检索所需信息。全文构造是 CONTAINS 或 FREETEXT 谓词，或者是 CONTAINSTABLE 或 FREETEXTTABLE 行集函数。如果不知道包含搜索条件的列，全文构造可以在全文索引中引用多列。该进程的流程如下图所示。<br /><br /> <br /><br /><br />这一进程涉及的步骤包括： <br /><br />应用程序给 SQL Server 实例发送带全文构造的 Transact-SQL 语句。<br /><br />SQL Server 关系引擎通过查询系统表验证全文构造，确定全文索引是否覆盖列引用。关系引擎将每个 SQL 语句简化为一系列行集操作，并使用 OLE DB 将这些操作传递给基础组件，通常是存储引擎。关系引擎通过全文提供程序而不是存储引擎，将任何全文构造转换成对行集的请求。请求的行集是满足搜索条件和等级的键集，而这个等级表示每个键的数据满足搜索条件的程度。向全文提供程序发送的行集请求命令包括全文检索条件。<br /><br />全文提供程序验证请求并将搜索条件更改为由Microsoft 搜索服务的查询支持组件使用的形式。将请求发送到搜索服务。<br /><br />查询支持组件使用搜索引擎组件从全文索引析取所请求的数据。然后以行集的形式将这些数据传递回全文提供程序。<br /><br />全文提供程序将这个行集返回给关系引擎。<br /><br />关系引擎将它从存储引擎和全文提供程序收到的所有行集进行组合，以生成发送回客户端的最终结果集。 <br /><br /> <br /><br />全文目录和索引<br /><br />Microsoft&amp;reg; SQL Server&amp;#8482; 2000 全文索引为在字符串数据中进行复杂的词搜索提供有效支持。全文索引存储关于重要词和这些词在特定列中的位置的信息。全文查询利用这些信息，可快速搜索包含具体某个词或一组词的行。<br /><br />全文索引包含在全文目录中。每个数据库可以包含一个或多个全文目录。一个目录不能属于多个数据库，而每个目录可以包含一个或多个表的全文索引。一个表只能有一个全文索引，因此每个有全文索引的表只属于一个全文目录。<br /><br />全文目录和索引不存储在它们所属的数据库中。目录和索引由 Microsoft 搜索服务分开管理。<br /><br />全文索引必须在基表上定义，而不能在视图、系统表或临时表上定义。 全文索引的定义包括： <br /><br />能唯一标识表中各行的列（主键或候选键），而且不允许 NULL 值。<br /><br />索引所覆盖的一个或多个字符串列。 <br /><br />全文索引由键值填充。每个键的项提供与该键相关联的重要词（干扰词或终止词除外）、它们所在的列和它们在列中的位置等有关信息。<br /><br />格式化文本字符串（如 Microsoft&amp;reg; Word&amp;#8482; 文档文件或 HTML 文件）不能存储在字符串或 Unicode 列中，因为这些文件中的许多字节包含不构成有效字符的数据结构。数据库应用程序可能仍需要访问这些数据并对其应用全文检索。因为 image 列并不要求每一字节都构成一个有效字符，所以许多站点将这类数据存储在 image 列中。SQL Server 2000 引入了对存储在 image 列中的这些类型的数据执行全文检索的能力。SQL Server 2000 提供筛选，可从 Microsoft Office&amp;#8482; 文件（.doc、.xls 和 .ppt 文件）、文本文件（.txt 文件）及 HTML 文件（.htm 文件）中析取文本化数据。设计表时除包括保存数据的 image 列外，还需包括绑定列来保存存储在 image 列中的数据格式的文件扩展名。可以创建引用 image 列和绑定列的全文索引，以便在存储于 image 列中的文本化信息上启用全文检索。SQL Server 2000 全文检索引擎使用绑定列中的文件扩展名信息，选择从列中析取文本化数据的合适的筛选。<br /><br />全文索引是用于执行两个 Transact-SQL 谓词的组件，以便根据全文检索条件对行进行测试： <br /><br />CONTAINS<br /><br />FREETEXT <br /><br />Transact-SQL 还包含两个返回符合全文检索条件的行集的函数： <br /><br />CONTAINSTABLE<br /><br />FREETEXTTABLE <br /><br />SQL Server 在内部将搜索条件发送给 Microsoft 搜索服务。Microsoft 搜索服务查找所有符合全文检索条件的键并将它们返回给 SQL Server。SQL Server 随后使用键的列表来确定表中要处理的行。<br /><br />全文索引<br /><br />对 Microsoft&amp;reg; SQL Server&amp;#8482; 2000 数据的全文支持涉及两个功能：对字符数据发出查询的能力和创建及维护基础索引以简化这些查询的能力。<br /><br />全文索引在许多地方与普通的 SQL 索引不同。<br /><br />普通 SQL 索引<br /> 全文索引<br /> <br />存储时受定义它们所在的数据库的控制。<br /> 存储在文件系统中，但通过数据库管理。<br /> <br />每个表允许有若干个普通索引。<br /> 每个表只允许有一个全文索引。<br /> <br />当对作为其基础的数据进行插入、更新或删除时，它们自动更新。<br /> 将数据添加到全文索引称为填充，全文索引可通过调度或特定请求来请求，也可以在添加新数据时自动发生。<br /> <br />不分组。<br /> 在同一个数据库内分组为一个或多个全文目录。<br /> <br />使用 SQL Server 企业管理器、向导或 Transact-SQL 语句创建和除去。<br /> 使用 SQL Server 企业管理器、向导或存储过程创建、管理和除去。<br /> <br /><br /><br /> <br /><br />这些差异使大量管理任务变得不可缺少。全文管理是在几个层次上实施的： <br /><br />服务器 <br /><br />可以对服务器范围的某些属性（如 resource_usage）加以设置，以便增加或减少全文服务所使用的系统资源数量。<br /><br /><br />说明  全文引擎作为名为 Microsoft 搜索的服务在 Microsoft Windows NT&amp;reg; Server 和 Microsoft Windows&amp;reg; 2000 Server 上运行。对于 Microsoft SQL Server 个人版，Microsoft 搜索服务不可用。尽管这意味着 Microsoft 搜索服务既未安装在 Microsoft Windows 95/98 上，也未安装在 Windows NT 工作站或 Windows 2000 Professional 客户端上，但这些客户端在连接到 SQL Server 标准版安装或企业版实例时可以使用这项服务。<br /><br />数据库 <br /><br />必须启用数据库才能使用全文服务。可以在已启用的数据库中创建和除去一个或多个全文目录的元数据。<br /><br />全文目录 <br /><br />全文目录包含数据库中的全文索引。每个目录可以用于数据库内的一个或多个表的索引需求。该目录中的索引是使用这里介绍的管理功能来填充的。（全文目录必须驻留在与 SQL Server 实例相关联的本地硬盘驱动器上。不支持可移动的驱动器、软盘和网络驱动器）。在每个服务器上最多可创建 256 个全文目录。<br /><br /><br />说明  Windows NT 故障转移群集环境完全支持全文索引。有关更多信息，请参见在故障转移群集中运行全文查询。<br /><br />表 <br /><br />首先，必须为全文支持启用表。然后，为与该表相关联的全文索引创建元数据（如表名及其全文目录）。表启用后，可以用为全文支持而启用的列中的数据填充它。如果表的全文定义被更改（例如，添加一个也将为全文检索而索引的新列），则必须重新填充相关的全文目录以使全文索引与新的全文定义同步。<br /><br />列 <br /><br />可以从非活动的注册表中添加或除去支持全文查询的列。<br /><br />在所有这些级别上，可使用工具检索元数据和状态信息。<br /><br />和常规 SQL 索引一样，当在相关表中修改数据时，可自动更新全文索引。或者，也可以适当的间隔手工重新填充全文索引。这种重写可能既耗时又大量占用资源，因此，在数据库活动较少时，这通常是在后台运行的异步进程。<br /><br />应将具有相同更新特性的表（如更改少的与更改多的，或在一天的特定时段内频繁更改的表）组合在一起，并分配给相同的全文目录。通过以此方法设置全文目录填充调度，使得全文索引和表保持同步，且在数据库活动较多时不对数据库服务器的资源使用产生负面影响。<br /><br />为全文目录中的表安排全文索引的位置是非常重要的。在为全文目录指定表时，应该注意下列基本原则： <br /><br />始终选择可用于全文唯一键的最小唯一索引。（4 个字节且基于整数的索引是最佳的。）这将显著减少文件系统中 Microsoft 搜索服务所需要的资源。如果主键很大（超过 100 字节），可以考虑选择表中其它唯一索引（或创建另一个唯一索引）作为全文唯一键。否则，如果全文唯一键的大小达到允许的上限（450 字节），全文填充将无法继续进行。<br /><br />如果进行索引的表有成千上万行，请将该表指定给其自己的全文目录。<br /><br />应该考虑对其进行全文索引的表中发生的更改数以及表的行数。如果要更改的总行数，加上上次全文填充期间表中出现的行数达到成千上万行，请将该表指定给其自己的全文目录。 <br /><br />请参见<br /><br />sp_fulltext_table<br /><br />CONTAINS<br /><br />一个谓词，用于搜索包含基于字符的数据类型的列，该列与单个词和短语，以及与另一个词一定范围之内的近似词精确或模糊（不太精确的）匹配或者加权匹配。CONTAINS 可以搜索： <br /><br />词或短语。<br /><br />词或短语的前缀。<br /><br />另一个词附近的词。<br /><br />由另一个词的词尾变化生成的词（例如，词 drive 是 drives、drove、driving 和 driven 词尾变化的词干）。<br /><br />比另一个词具有更高加权的词。 <br /><br />语法<br />CONTAINS<br />    ( { column | * } , '&lt; contains_search_condition &gt;'     <img onclick="window.open('/images/wink.gif','_blank');" alt="" hspace="2" src="http://www.blogcn.com/images/wink.gif" onload="javascript:if(this.width&gt;screen.width/2)this.width=screen.width/2" vspace="2" border="0" /> <br /><br /> <br /><br />FREETEXT<br /><br />是个谓词，用于搜索含有基于字符的数据类型的列，其中的值符合在搜索条件中所指定文本的含义，但不符合表达方式。使用 FREETEXT 时，全文查询引擎内部将 freetext_string 拆分为若干个搜索词，并赋予每个词以不同的加权，然后查找匹配。<br /><br />语法<br /><br />FREETEXT ( { column | * } , 'freetext_string' <img onclick="window.open('/images/wink.gif','_blank');" alt="" hspace="2" src="http://www.blogcn.com/images/wink.gif" onload="javascript:if(this.width&gt;screen.width/2)this.width=screen.width/2" vspace="2" border="0" /><br /><br /> <br /><br />CONTAINSTABLE 和 FREETEXTTABLE 函数用来指定返回每行的相对排名的全文查询。这两个函数与全文谓词 CONTAINS 和 FREETEXT 很相似，但是用法不同。<br /><img src ="http://www.blogjava.net/280211429/aggbug/58686.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/280211429/" target="_blank">国强</a> 2006-07-18 09:48 <a href="http://www.blogjava.net/280211429/articles/58686.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server2000全文索引image列全攻略 </title><link>http://www.blogjava.net/280211429/articles/58685.html</link><dc:creator>国强</dc:creator><author>国强</author><pubDate>Tue, 18 Jul 2006 01:47:00 GMT</pubDate><guid>http://www.blogjava.net/280211429/articles/58685.html</guid><wfw:comment>http://www.blogjava.net/280211429/comments/58685.html</wfw:comment><comments>http://www.blogjava.net/280211429/articles/58685.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/280211429/comments/commentRss/58685.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/280211429/services/trackbacks/58685.html</trackback:ping><description><![CDATA[
		<div class="postcontent">
				<p>引言 </p>
				<p>微软的SQL Server数据库是一个在中低端企业应用中占有广泛市场的关系型数据库系统，它以简单、方便、易用等特性深得众多软件开发人员和数据库管理人员的钟爱。但SQL Server 7.0以前的数据库系统由于没有全文检索功能，致使无法提供像文本内容查找此类的服务，成为一个小小的遗憾。从SQL Server 7.0起，到如今的SQL Server 2000终于具备了全文检索功能，使用户可以高效地检索存储在数据库char、varchar、text、ntext、nchar、nvarchar等数据类型列中的文本数据。 </p>
				<p>建立全文索引 </p>
				<p>在进行全文检索之前，必须先建立和填充数据库全文索引。为了支持全文索引操作，SQL Server 7.0新增了一些存储过程和Transact-SQL语句。使用这些存储过程创建全文索引的具体步骤如下（括号内为调用的存储过程名称）： </p>
				<p>1. 启动数据库的全文处理功能(sp_fulltext_ </p>
				<p>database);； </p>
				<p>2. 建立全文检索目录(sp_fulltext_catalog); </p>
				<p>3.在全文检索目录中注册需要全文索引的表(sp_fulltext_table); </p>
				<p>4. 指出表中需要全文检索的列名(sp_fulltext_ </p>
				<p>column);； </p>
				<p>5. 为表创建全文索引(sp_fulltext_table);； </p>
				<p>6. 填充全文检索目录(sp_fulltext_catalog)。 </p>
				<p>下面举例说明如何创建全文索引，在本例中，对Test数据库Book表中Title列和Notes列建立全文索引。 </p>
				<p>use test //打开数据库 </p>
				<p>//打开全文索引支持，启动SQL Server的全文搜索服务 </p>
				<p>execute sp_fulltext_database ‘enable’ </p>
				<p>//建立全文检索目录ft_test </p>
				<p>execute sp_fulltext_catalog ‘ft_test’, ‘create’ </p>
				<p>为Title列建立全文索引数据元，pk_title为Book表中由主键所建立的唯一索引，这个参数是必需的。 </p>
				<p>execute sp_fulltext_table ‘book’，‘create’, ‘ft_test’，‘pk_title’ </p>
				<p>//设置全文索引列名 </p>
				<p>execute sp_fulltext_column ‘book’, ‘title’, ‘add’ </p>
				<p>execute sp_fulltext_column ‘book’，‘notes’, ‘add’ </p>
				<p>//建立全文索引 </p>
				<p>execute sp_fulltext_table ‘book’, ‘activate’ </p>
				<p>//填充全文索引目录 </p>
				<p>execute sp_fulltext_catalog ‘ft_test’, ‘start_full’ </p>
				<p>至此，全文索引建立完毕。 </p>
				<p>进行全文检索 </p>
				<p>SQL Server 2000提供的全文检索语句主要有CONTAINS和FREETEXT。CONTAINS语句的功能是在表的所有列或指定列中搜索：一个字或短语；一个字或短语的前缀；与一个字相近的另一个字；一个字的派生字；一个重复出现的字。 </p>
				<p>CONTAINS语句的语法格式为： </p>
				<p>CONTAINS({column | *}), &lt;contains_search </p>
				<p>_condition&gt;) </p>
				<p>其中，column是搜索列，使用“*”时说明对表中所有全文索引列进行搜索。Contains_search_ </p>
				<p>condition 说明CONTAINS语句的搜索内容，其语法格式为： </p>
				<p>{&lt;simple_term&gt;|&lt;prefix_term&gt;|&lt;proximity_term&gt;|&lt;generation_term&gt;|&lt;weighted_term&gt;}[{{AND|AND NOT|OR}&lt;contains_search_condition&gt;}] [...n] </p>
				<p>下面就simple_term和prefix_term参数做简要说明： </p>
				<p>simple_term是CONTAINS语句所搜索的单字或短语，当搜索的是一个短语时，必须使用双引号作为定界符。其格式为： </p>
				<p>{‘word’|“ phrase”} </p>
				<p>prefix_term说明CONTAINS语句所搜索的字或短语前缀，其格式为： </p>
				<p>{“word*” | “phrase*”} </p>
				<p>例如，下面语句检索Book表的Title列和Notes列中包含“database”或“computer”字符串的图书名称及其注释信息： </p>
				<p>select title, notes </p>
				<p>from book </p>
				<p>where contains(tilte, ‘database’) or contains(notes，‘database’) </p>
				<p>or contains(title，‘computer’) or contains(notes，‘computer’) </p>
				<p>FREETEXT语句的功能是在一个表的所有列或指定列中搜索一个自由文本格式的字符串，并返回与该字符串匹配的数据行。所以，FREETEXT语句所执行的功能又称做自由式全文查询。 </p>
				<p>FREETEXT语句的语法格式为：FREETEXT({column | * }，‘freetext_string’) </p>
				<p>其中，column是被搜索列，使用“*”时说明对表中的所有全文索引列进行搜索。Freetext_string参数指出所搜索的自由文本格式字符串。 </p>
				<p>例如，下面语句使用FREETEXT语句搜索Book表中包含“Successful Life”字符串的数据行： </p>
				<p>select title, notes </p>
				<p>from book </p>
				<p>where freetext(*，‘Successful Life’) </p>
		</div>
<img src ="http://www.blogjava.net/280211429/aggbug/58685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/280211429/" target="_blank">国强</a> 2006-07-18 09:47 <a href="http://www.blogjava.net/280211429/articles/58685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>动网论坛全文索引建立帮助 </title><link>http://www.blogjava.net/280211429/articles/58684.html</link><dc:creator>国强</dc:creator><author>国强</author><pubDate>Tue, 18 Jul 2006 01:43:00 GMT</pubDate><guid>http://www.blogjava.net/280211429/articles/58684.html</guid><wfw:comment>http://www.blogjava.net/280211429/comments/58684.html</wfw:comment><comments>http://www.blogjava.net/280211429/articles/58684.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/280211429/comments/commentRss/58684.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/280211429/services/trackbacks/58684.html</trackback:ping><description><![CDATA[
		<div class="post">
				<div class="posttitle"> </div>
				<div class="postcontent">
						<p align="left">
								<b>在SQL 企业管理器上操作步骤：</b>
						</p>
						<p align="left">
								<font color="#000080">一：进入企业管理器，打开支持服务，选取全文检索，点击启动。</font>
						</p>
						<p align="center">
								<img height="584" src="http://www.artbbs.net/Demo/Dvbbs_Help/Help_Img/help-1.png" width="642" border="0" />
						</p>
						<p align="left">　</p>
						<p align="left">
								<font color="#000080">二：对相关的数据表建立全文索引。</font>
						</p>
						<p align="center">
								<img height="617" src="http://www.artbbs.net/Demo/Dvbbs_Help/Help_Img/help-2.png" width="803" border="0" />
						</p>
						<p align="left">
								<font color="#000080">三：全文索引建立向导</font>
						</p>
						<p align="center">
								<img height="427" src="http://www.artbbs.net/Demo/Dvbbs_Help/Help_Img/help-3.png" width="511" border="0" />
						</p>
						<p align="center">
								<img height="382" src="http://www.artbbs.net/Demo/Dvbbs_Help/Help_Img/help-4.png" width="500" border="0" />
						</p>
						<p align="left">　</p>
						<p align="center">
								<img height="381" src="http://www.artbbs.net/Demo/Dvbbs_Help/Help_Img/help-5.png" width="499" border="0" />
						</p>
						<p align="left">　</p>
						<p align="center">
								<img height="378" src="http://www.artbbs.net/Demo/Dvbbs_Help/Help_Img/help-6.png" width="502" border="0" />
						</p>
						<p align="left">　</p>
						<p align="center">
								<img height="385" src="http://www.artbbs.net/Demo/Dvbbs_Help/Help_Img/help-7.png" width="495" border="0" />
						</p>
						<p align="center">
								<img height="325" src="http://www.artbbs.net/Demo/Dvbbs_Help/Help_Img/help-8.png" width="413" border="0" />
						</p>
						<p align="left">然后确定提交后，建立向导就基本完成。</p>
						<p align="center">
								<img height="378" src="http://www.artbbs.net/Demo/Dvbbs_Help/Help_Img/help-9.png" width="498" border="0" />
						</p>
						<p align="left">到这里在SQL上建立全文索引已经完成！</p>
						<p align="left">
								<font color="#000080">四：补充：由于全文填充是按照调度里设定周期进行的，所以不会马上生效，如果需要的话可以点击全目录，运行填充。通常数据量大的话不建议在访问量大的时候进行。</font>
						</p>
						<p align="center">
								<img height="285" src="http://www.artbbs.net/Demo/Dvbbs_Help/Help_Img/help-10.png" width="677" border="0" />
						</p>
						<p align="center">　</p>
						<p align="left">
								<b>
										<font color="#ff0000">解决在全文搜索中搜索中文字符出错补丁：<a href="http://www.artbbs.net/Demo/Dvbbs_Help/Help_Img/SQLx86.rar"><font color="#808080">点击下载</font></a></font>
								</b>
						</p>
						<p align="left">解决中文字符出错问题：<br /><br />方法一：<br />把下载解压的文件复制到...\Microsoft SQL Server\MSSQL\FTDATA\SQLServer\Config\<br />目录下（该路径为全文目录路径，可以全文目录属性中查看）<br /><br />方法二：<br />编辑...\Microsoft SQL Server\MSSQL\FTDATA\SQLServer\Config\目录下的<br />noise.chs文件,清空文档，输入‘@’(其他的偏僻符号也可以）<br /><br /><br />最后，重新进行全文完全填充！</p>
				</div>
				<div class="itemdesc"> </div>
		</div>
<img src ="http://www.blogjava.net/280211429/aggbug/58684.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/280211429/" target="_blank">国强</a> 2006-07-18 09:43 <a href="http://www.blogjava.net/280211429/articles/58684.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MS SQL Server2000全文索引image列全攻略</title><link>http://www.blogjava.net/280211429/articles/58683.html</link><dc:creator>国强</dc:creator><author>国强</author><pubDate>Tue, 18 Jul 2006 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/280211429/articles/58683.html</guid><wfw:comment>http://www.blogjava.net/280211429/comments/58683.html</wfw:comment><comments>http://www.blogjava.net/280211429/articles/58683.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/280211429/comments/commentRss/58683.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/280211429/services/trackbacks/58683.html</trackback:ping><description><![CDATA[
		<div class="post">
				<div class="posttitle"> </div>
				<div class="postcontent">今天“百年不遇”的停电了，看了一天书。晚上搞了一下全文索引，决定把心得贴出来，我尽量写的详细，大家共同学习，欢迎指正！<br />　　<br />　　<b>1、启动 Microsoft Search 服务</b><br />　　<br />　　　 开疾说?-&gt;SQL程序组--&gt;服务管理器--&gt;下拉筐--&gt;Microsoft Search 服务--&gt;启动它<br />　　<br />　　<b>2、</b><br />　　　..\Microsoft SQL Server\MSSQL\FTDATA\SQLServer\Config\目录里建一个非空noise.chs文件<br />　　　非空noise.chs文件，也有人说是空的noise.chs文件，但我每次都往里写几个没用的字母。<br />　　<br />　　<b>3、建立环境</b><br />　　<br />　　　 打开查询分析器--&gt;执行下列脚本：<br />　　--------------------------------------------<br />　　create database test ---创建test数据库<br />　　use test　　　　　　 ---选择test数据库<br />　　create table　dali (ID int not null primary key,MyImage image,FileType varchar(255),FileNmae varchar(255)) ---创建dali表<br />　　--dali表中 Id,MyImage,FileType 三列是必须的，因为要对image列索引的话，必须要有一个主键列，一个image列,一个存放文件类型的列<br />　　--我们知道在windows系统中文件类型是靠扩展名来区分的所以FileType列也就是用来放 文件的扩展名<br />　　--------------------------------------------<br />　　<br />　　sp_fulltext_database 'enable' --为全文索引启用数据库<br />　　sp_fulltext_catalog 'My_FullDir', 'create'　---创建一个叫My_FullDif的全文目录<br />　　<br />　　declare @Key sysname ; select @Key=c.name from syscolumns a,sysconstraints b,sysobjects c where a.id=object_id('a') and a.name='a' and a.id=b.id and b.constid=c.id and c.name like 'PK%'<br />　　exec sp_fulltext_table 'dali','create','My_FullDir',@Key　----这两句是为全文索引,对表进行标记<br />　　<br />　　sp_fulltext_column 'dali','MyImage','add',0x0804,'FileType'　---这句是指定MyImage列为全文索引列,FileType是类型列<br />　　------------------------------------------------<br />　　<b>4、在c盘下放一个扩展名为doc的word文件,一个扩展名为xls的excel文件,一个扩展名为htm的网页文件,个扩展名为bmp的图片共4个，大家可根据实际情况放入！</b><br />　　<br />　　<b>5、插入数据</b><br />　　<br />　　　建立下面这个存储过程<br />　　--------------------------------------------------<br />　　CREATE PROCEDURE sp_textcopy<br />　　　@srvname　　varchar (30),<br />　　　@login　　　varchar (30),<br />　　　@password　　varchar (30),<br />　　　@dbname　　　varchar (30),<br />　　　@tbname　　　varchar (30),<br />　　　@colname　　varchar (30),<br />　　　@filename　　varchar (30),<br />　　　@whereclause varchar (40),<br />　　　@direction　char(1)<br />　　AS<br />　　/* 这是使用textcopy工具将文件插入到数据库中，如果有前台工具可以用前台开发工具将文件插入，这里为了演示 */<br />　　DECLARE @exec_str varchar (255)<br />　　SELECT @exec_str='textcopy /S ' @srvname ' /U ' @login ' /P ' @password ' /D ' @dbname ' /T' @tbname ' /C ' @colname ' /W"' @whereclause '" /F"' @filename '" /' @direction<br />　　EXEC master..xp_cmdshell @exec_str<br />　　----------------------------------------------------<br />　　<br />　　insert dali values(1,0x,'doc','大力的doc') ---其中第二列是 0x 它是一个16进制数对应image列,是必须的,不要写null,第三列是文件类型，既扩展名<br />　　<br />　　sp_textcopy '你的服务器名','sa','你的密码','test','dali','MyImage','c:\大力的doc.doc','where ID=1','I'<br />　　-------依次参数是：实例名,用户名,密码，数据库名，表名，image列名，路径及文件名，条件(你必须保证它只选择一行)，I<br />　　---------------------------------------------------------------------------------------------------------------------<br />　　insert dali values(2,0x,'bmp','图片')<br />　　sp_textcopy '你的服务器名','sa','你的密码','test','dali','MyImage','c:\图片.bmp','where ID=2','I' --注意条件是 ID=2<br />　　<br />　　insert dali values(3,0x,'xls','Excel文件')<br />　　sp_textcopy '你的服务器名','sa','你的密码','test','dali','MyImage','c:\Excel文件.xls','where ID=3','I' --注意条件是 ID=3<br />　　<br />　　insert dali values(4,0x,'htm','网页')<br />　　sp_textcopy '你的服务器名','sa','你的密码','test','dali','MyImage','c:\网页.htm','where ID=4','I' --注意条件是 ID=4<br />　　<br />　　----------上面的语句,要保证类型一样，路径正确，条件唯一正确应该就可以了<br />　　<br />　　<b>6、填充全文索引</b><br />　　<br />　　sp_fulltext_table 'dali','start_full' ---第一个参数是表名，第二个参数是启动表的全文索引的完全填充<br />　　<br />　　<b>7、可以开始你的实验了</b><br />　　<br />　　select * from dali where contains(MyImage,'J老师')<br />　　<br />　　select * from dali where contains(MyImage,'海老师')<br />　　<br />　　------END----------<br />　　--调试环境：SQLServer2K、Windows2Kas<br /></div>
				<div class="itemdesc"> </div>
		</div>
<img src ="http://www.blogjava.net/280211429/aggbug/58683.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/280211429/" target="_blank">国强</a> 2006-07-18 09:41 <a href="http://www.blogjava.net/280211429/articles/58683.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>