<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_在拼搏中成长</title><subtitle type="text">成功的人总是在找方法，失败的人总是在找理由，我要成功。</subtitle><id>http://feed.cnblogs.com/blog/u/33929/rss</id><updated>2012-02-02T01:07:30Z</updated><author><name>Robert.H.fu</name><uri>http://www.cnblogs.com/luohoufu/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luohoufu/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/33929/rss"/><entry><id>http://www.cnblogs.com/luohoufu/archive/2012/02/02/2335322.html</id><title type="text">国内最大的免费空间站,国内最便宜最稳定的空间</title><summary type="text">云空间(83432.com) - 国内最大的免费空间站,国内最便宜最稳定的空间 免费1T全能空间正在火爆开放中。。。。。 【注册地址】： http://www.83432.com/free 【特色介绍】： 『空间无限 永久免费』 免费为您提供1T超大的存储空间，足以容纳成千上万甚至上百万计的网页文件，并可永久免费使用! 『域名绑定及转发』 您可以绑定自己的域名!另外赠送三级的免费域名供您使用! 『WEB管理 FTP管理』 通过在线(Web)和FTP两种方式及在线解压/压解等强大功能，可以轻松完成网站发布及维护任务，使文件管理易如反掌! 『多种脚本支...</summary><published>2012-02-02T01:08:00Z</published><updated>2012-02-02T01:08:00Z</updated><author><name>Robert.H.fu</name><uri>http://www.cnblogs.com/luohoufu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luohoufu/archive/2012/02/02/2335322.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luohoufu/archive/2012/02/02/2335322.html"/><content type="html">&lt;div&gt;&lt;pre&gt;云空间(83432.com) - 国内最大的免费空间站,国内最便宜最稳定的空间   &lt;br /&gt;免费1T全能空间正在火爆开放中。。。。。   &lt;br /&gt;【注册地址】：   http://www.83432.com/free  &lt;br /&gt;【特色介绍】：   『空间无限 永久免费』  免费为您提供1T超大的存储空间，足以容纳成千上万甚至上百万计的网页文件，并可永久免费使用!   &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 『域名绑定及转发』  您可以绑定自己的域名!另外赠送三级的免费域名供您使用!    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 『WEB管理 FTP管理』  通过在线(Web)和FTP两种方式及在线解压/压解等强大功能，可以轻松完成网站发布及维护任务，使文件管理易如反掌!    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 『多种脚本支持』  支持HTML、ASP、及PHP多种脚本，使您的选择更加灵活!   &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 『数据库支持』  系统同进支持ACCESS、MYSQL多种数据库，使您的选更加全面，满足您的多种需要!   &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 『组件齐全』  支持FSO、Zend、Jmail、AspJepg等多种流行组件，全面支持，并且不断完善，不断更新，体验更多建站乐趣!    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; （luohf） &lt;/pre&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/luohoufu/aggbug/2335322.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luohoufu/archive/2012/02/02/2335322.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luohoufu/archive/2011/02/21/1960059.html</id><title type="text">编程连接远程SQL服务器出现问题及对策</title><summary type="text">一."SQL Server 不存在或访问被拒绝"这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多.一般说来,有以下几种可能性:1,SQL Server名称或IP地址拼写有误2,服务器端网络配置有误3,客户端网络配置有误要解决这个问题,我们一般要遵循以下的步骤来一步步找出导致错误的原因.============= 首先,检查网络物理连接 =============ping &amp;lt;服务器IP地址/服务器名称&amp;gt;如果 ping &amp;lt;服务器IP地址&amp;gt; 不成功,说明物理连接有问题,这时候要检查硬件设备,如网卡,HUB,路由器等.还有一种可能是由于客户端和服务器之间安装有防火墙</summary><published>2011-02-21T11:45:00Z</published><updated>2011-02-21T11:45:00Z</updated><author><name>Robert.H.fu</name><uri>http://www.cnblogs.com/luohoufu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luohoufu/archive/2011/02/21/1960059.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luohoufu/archive/2011/02/21/1960059.html"/><content type="html">&lt;p&gt;一."SQL Server 不存在或访问被拒绝"&lt;/p&gt;&#xD;
&lt;p&gt;这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多.&lt;/p&gt;&#xD;
&lt;p&gt;一般说来,有以下几种可能性:&lt;/p&gt;&#xD;
&lt;p&gt;1,SQL Server名称或IP地址拼写有误&lt;br /&gt;2,服务器端网络配置有误&lt;br /&gt;3,客户端网络配置有误&lt;/p&gt;&#xD;
&lt;p&gt;要解决这个问题,我们一般要遵循以下的步骤来一步步找出导致错误的原因.&lt;/p&gt;&#xD;
&lt;p&gt;============= 首先,检查网络物理连接 =============&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#0000ff"&gt;ping &amp;lt;服务器IP地址/服务器名称&amp;gt;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果 ping &amp;lt;服务器IP地址&amp;gt; 不成功,说明物理连接有问题,这时候要检查硬件设备,如网卡,HUB,路由器等.&lt;br /&gt;还有一种可能是由于客户端和服务器之间安装有防火墙软件造成的,比如 ISA Server.防火墙软件可能会屏蔽对 ping,telnet 等的响应。因此在检查连接问题的时候,我们要先把防火墙软件暂时关闭,或者打开所有被封闭的端口.&lt;/p&gt;&#xD;
&lt;p&gt;如果ping &amp;lt;服务器IP地址&amp;gt; 成功而,ping &amp;lt;服务器名称&amp;gt; 失败，则说明名字解析有问题,这时候要检查 DNS 服务是否正常.（&lt;font color="#800000"&gt;这时如果其它地方（服务器配置，连接字符串&amp;#8230;&amp;#8230;等）没问题，则用&amp;lt;服务器IP地址&amp;gt;可以连接成功&lt;/font&gt;）&lt;br /&gt;如果希望直接使用服务器名称来标识该服务器,这时候我们可以使用HOSTS文件来进行名字解析，具体的方法是:&lt;/p&gt;&#xD;
&lt;p&gt;1.使用记事本打开HOSTS文件（一般情况下位于C:\WINNT\system32\drivers\etc）.&lt;br /&gt;添加一条IP地址与服务器名称的对应记录,如:&lt;br /&gt;172.168.10.24 myserver&lt;/p&gt;&#xD;
&lt;p&gt;2.或在 SQL Server 的客户端网络实用工具里面进行配置,后面会有详细说明.&lt;/p&gt;&#xD;
&lt;p&gt;============= 其次,使用 telnet 命令检查SQL Server服务器工作状态 =============&lt;br /&gt;&lt;font color="#0000ff"&gt;telnet &amp;lt;服务器IP地址&amp;gt; 1433&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果命令执行成功,可以看到屏幕一闪之后光标在左上角不停闪动,这说明 SQL Server 服务器工作正常,并且正在监听1433端口的 TCP/IP 连接&lt;br /&gt;如果命令返回"无法打开连接"的错误信息,则说明服务器端没有启动 SQL Server 服务,&lt;br /&gt;也可能服务器端没启用 TCP/IP 协议,或者服务器端没有在 SQL Server 默认的端口1433上监听.&lt;/p&gt;&#xD;
&lt;p&gt;=============接着,我们要到服务器上检查服务器端的网络配置,检查是否启用了命名管道.是否启用了 TCP/IP 协议等等 =============&lt;br /&gt;可以利用 SQL Server 自带的服务器网络使用工具来进行检查.&lt;/p&gt;&#xD;
&lt;p&gt;点击:程序 -- Microsoft SQL Server -- 服务器网络使用工具&lt;/p&gt;&#xD;
&lt;p&gt;打开该工具后,在"常规"中可以看到服务器启用了哪些协议.&lt;br /&gt;一般而言,我们启用命名管道以及 TCP/IP 协议.&lt;br /&gt;点中 TCP/IP 协议,选择"属性",我们可以来检查 SQK Server 服务默认端口的设置&lt;br /&gt;一般而言,我们使用 SQL Server 默认的1433端口.如果选中"隐藏服务器",则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;============= 接下来我们要到客户端检查客户端的网络配置 =============&lt;br /&gt;我们同样可以利用 SQL Server 自带的客户端网络使用工具来进行检查,&lt;br /&gt;所不同的是这次是在客户端来运行这个工具.&lt;/p&gt;&#xD;
&lt;p&gt;点击:程序 -- Microsoft SQL Server -- 客户端网络使用工具&lt;/p&gt;&#xD;
&lt;p&gt;打开该工具后,在"常规"项中,可以看到客户端启用了哪些协议.&lt;br /&gt;一般而言,我们同样需要启用命名管道以及 TCP/IP 协议.&lt;br /&gt;点击 TCP/IP 协议,选择"属性",可以检查客户端默认连接端口的设置,该端口必须与服务器一致.&lt;/p&gt;&#xD;
&lt;p&gt;单击"别名"选项卡,还可以为服务器配置别名.服务器的别名是用来连接的名称,&lt;br /&gt;连接参数中的服务器是真正的服务器名称,两者可以相同或不同.别名的设置与使用HOSTS文件有相似之处.&lt;/p&gt;&#xD;
&lt;p&gt;通过以上几个方面的检查,基本上可以排除第一种错误.&lt;/p&gt;&#xD;
&lt;p&gt;二."无法连接到服务器,用户xxx登陆失败"&lt;/p&gt;&#xD;
&lt;p&gt;原因1、该错误产生的原因是由于SQL Server使用了"仅 Windows"的身份验证方式,&lt;br /&gt;因此用户无法使用SQL Server的登录帐户（如 sa ）进行连接.解决方法如下所示:&lt;/p&gt;&#xD;
&lt;p&gt;1.在服务器端使用企业管理器,并且选择"使用 Windows 身份验证"连接上 SQL Server&lt;br /&gt;2.展开"SQL Server组",鼠标右键点击SQL Server服务器的名称,选择"属性",再选择"安全性"选项卡&lt;br /&gt;3.在"身份验证"下,选择"SQL Server和 Windows ".&lt;br /&gt;4.重新启动SQL Server服务.&lt;/p&gt;&#xD;
&lt;p&gt;在以上解决方法中,如果在第 1 步中使用"使用 Windows 身份验证"连接 SQL Server 失败,&lt;br /&gt;那就通过修改注册表来解决此问题:&lt;/p&gt;&#xD;
&lt;p&gt;1.点击"开始"-"运行",输入regedit,回车进入注册表编辑器&lt;br /&gt;2.依次展开注册表项,浏览到以下注册表键:&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer]&lt;br /&gt;3.在屏幕右方找到名称"LoginMode",双击编辑双字节值&lt;br /&gt;4.将原值从1改为2,点击"确定"&lt;br /&gt;5.关闭注册表编辑器&lt;br /&gt;6.重新启动SQL Server服务.&lt;/p&gt;&#xD;
&lt;p&gt;此时,用户可以成功地使用sa在企业管理器中新建SQL Server注册,&lt;br /&gt;但是仍然无法使用Windows身份验证模式来连接SQL Server.&lt;br /&gt;这是因为在 SQL Server 中有两个缺省的登录帐户:&lt;br /&gt;BUILTIN\Administrators&lt;br /&gt;&amp;lt;机器名&amp;gt;\Administrator 被删除.&lt;br /&gt;要恢复这两个帐户,可以使用以下的方法:&lt;/p&gt;&#xD;
&lt;p&gt;1.打开企业管理器,展开服务器组,然后展开服务器&lt;br /&gt;2.展开"安全性",右击"登录",然后单击"新建登录"&lt;br /&gt;3.在"名称"框中,输入 BUILTIN\Administrators&lt;br /&gt;4.在"服务器角色"选项卡中,选择"System Administrators" &lt;br /&gt;5.点击"确定"退出&lt;br /&gt;6.使用同样方法添加 &amp;lt;机器名&amp;gt;\Administrator 登录.&lt;/p&gt;&#xD;
&lt;p&gt;说明:&lt;/p&gt;&#xD;
&lt;p&gt;以下注册表键:&lt;br /&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\LoginMode&lt;br /&gt;的值决定了SQL Server将采取何种身份验证模式.&lt;br /&gt;1.表示使用"Windows 身份验证"模式&lt;br /&gt;2.表示使用混合模式（Windows 身份验证和 SQL Server 身份验证）.&lt;/p&gt;&#xD;
&lt;p&gt;原因2、&lt;font color="#800000"&gt;密码不对。&lt;/font&gt;这种情况很特殊，就是你的系统里安装了几种软件（当然它们不都是你做的），都要用到SQL数据库，你发现当它们之中的一个好用时，你的程序就出现"无法连接到服务器,用户xxx登陆失败"（这里的XXX通常会是sa--因为它是SQL的内置帐号），于是你开始检查服务器的各项配置，直到更改了sa帐号的密码，你发现你的程序可以连接成功了，但你同时发现那个软件却连接数据库失败了。这时你也就发现了原因：有些商业软件安装后会修改SQL的内置帐号sa的密码来增加安全性，但这样一来你的程序就不能利用sa帐号进入来连接服务器了。&lt;/p&gt;&#xD;
&lt;p&gt;解决方法：新建一个&amp;#8220;标准&amp;#8221;类型的帐号，你的程序用这个帐号来连接服务器就可以了。&lt;br /&gt;新建帐号方法：&lt;br /&gt;&lt;font color="#800000"&gt;1.打开企业管理器,展开服务器组,然后展开服务器&lt;br /&gt;2.展开"安全性","登录",然后右击，选择"新建登录"&amp;#8230;&amp;#8230;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;三.提示连接超时&lt;/p&gt;&#xD;
&lt;p&gt;如果遇到第三个错误,一般而言表示客户端已经找到了这台服务器,并且可以进行连接,&lt;br /&gt;不过是由于连接的时间大于允许的时间而导致出错.&lt;br /&gt;这种情况一般会发生在当用户在Internet上运行企业管理器来注册另外一台同样在Internet上的服务器,&lt;br /&gt;并且是慢速连接时,有可能会导致以上的超时错误.有些情况下,由于局域网的网络问题,也会导致这样的错误.&lt;/p&gt;&#xD;
&lt;p&gt;要解决这样的错误,可以修改客户端的连接超时设置.&lt;br /&gt;默认情况下,通过企业管理器注册另外一台SQL Server的超时设置是 4 秒,&lt;br /&gt;而查询分析器是 15 秒（这也是为什么在企业管理器里发生错误的可能性比较大的原因）.&lt;/p&gt;&#xD;
&lt;p&gt;具体步骤为:&lt;br /&gt;企业管理器中的设置:&lt;br /&gt;1.在企业管理器中,选择菜单上的"工具",再选择"选项"&lt;br /&gt;2.在弹出的"SQL Server企业管理器属性"窗口中,点击"高级"选项卡&lt;br /&gt;3.在"连接设置"下的"登录超时（秒）"右边的框中输入一个比较大的数字,如 20.&lt;/p&gt;&#xD;
&lt;p&gt;查询分析器中的设置:&lt;br /&gt;工具 -- 选项 -- 连接 -- 将登录超时设置为一个较大的数字&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;四.大部分机都用Tcp/ip才能成功，有次我发现用Named Pipes才可以？&lt;/p&gt;&#xD;
&lt;p&gt;这是因为在WINDOWS 2000以后的操作系统中，MS为解决SQL SERVER的安全问题将TCP/IP配置&lt;br /&gt;为SQLSERVER的默认连接协议，你可以在CLIENT NETWORK UTILITY中看到TCP/IP和NAME PIPE&lt;br /&gt;的顺序。&lt;/p&gt;&#xD;
&lt;p&gt;你也可以在：&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib]&lt;br /&gt;"ProtocolOrder"=hex(7):74,00,63,00,70,00,00,00,00,00&lt;br /&gt;看到默认的协议。&lt;/p&gt;&#xD;
&lt;p&gt;2.怎么在程序中更改Named Pipes ， Tcp/ip ，其sql语句怎么写？&lt;br /&gt;你可以在上面提到的注册表的位置修改：&lt;br /&gt;CLIENT端：&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib]&lt;br /&gt;"ProtocolOrder"=hex(7):74,00,63,00,70,00,00,00,00,00&lt;/p&gt;&#xD;
&lt;p&gt;SERVER端：&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLib]&lt;br /&gt;"ProtocolOrder"=hex(7):74,00,63,00,70,00,00,00,00,00&lt;/p&gt;&#xD;
&lt;p&gt;我的问题应该属于第一类，遗憾的是我按照上面说的方法都不能解决这个问题。我使用：telnet &amp;lt;服务器IP地址&amp;gt; 1433 显示不能正确连接。按照说的方法也不能解决这个问题。有网友说出现1433端口不能连接的因为是Sql Server 2000没有打补丁的缘故，但我打过sp4后仍然不能正确连接1433端口。（在打SP4之前要先打SP3）&lt;br /&gt;我在web.config里的设置为：&lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;appSettings&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--"data source=SASANK;initial catalog=CODER;persist security info=False;user id=sa;workstation id=SASANK;packet size=4096"--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add key="ConnectionString" value="server=localhost;Trusted_Connection=false;user id=sa;password=sa;database=sichuan"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/appSettings&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;system.web&amp;gt;&lt;br /&gt;找了好久原因，都不行。&lt;br /&gt;后来试着将数据库连接项改为：&lt;br /&gt;&amp;lt;add key="ConnectionString" value="server=192.168.254.60;Trusted_Connection=false;user id=sa;password=sa;database=sichuan"/&amp;gt;也就是把其中的Server改为我的机器在局域网中的IP地址（注意我是本机调试，我把server改为机器名也不行），连接运行，竟然成功了！&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;五、错误：在连接到SQL Server 2005时,在默认的设置下SQL不允许进行远程连接可能会导致此失败,(provider:TCP提供程序,erroe:0-由于目标机器积极拒绝,无法连接.)&lt;/p&gt;&#xD;
&lt;p&gt;解决方法：在服务器端，控制面板-&amp;gt;管理工具-&amp;gt;服务-&amp;gt;MSSQLSERVER(开启此服务，并设为自动)&lt;/p&gt;&#xD;
&lt;p&gt;六、在建立与服务器的连接时出错。在连接到 SQL Server 2005 时，在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: TCP 提供程序, error: 0 - 套接字操作遇到了一个已死的网络。)&lt;/p&gt;&#xD;
&lt;p&gt;解决方法：开始－程序－Sql Server 2005-配置工具－SQL Sevrer外围应用配置器－服务和连接的外围应用配置器－选择数据库－远程连接－选择TCP/UPD。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/luohoufu/aggbug/1960059.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luohoufu/archive/2011/02/21/1960059.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luohoufu/archive/2011/02/11/1951155.html</id><title type="text">SQL Server 中的时间算法</title><summary type="text">不需废话，直接上代码，注释很详细了，看懂肯定没问题啊！ DECLARE @Date DATETIME SET @Date=GETDATE() &amp;amp;#8211;前一天，给定日期的前一天 SELECT DATEADD(DAY,-1,@Date) AS &amp;amp;#8216;前一天&amp;amp;#8217; &amp;amp;#8211;后一天，给定日期的后一天 SELECT DATEADD(DAY,1,@Date) AS &amp;amp;#8216;后一天&amp;amp;#8217; GO &amp;amp;#8211;月初，计算给定日期所在月的第一天 &amp;amp;#8211;这个计算的技巧是先计算当前日期到&amp;amp;#82</summary><published>2011-02-11T02:31:00Z</published><updated>2011-02-11T02:31:00Z</updated><author><name>Robert.H.fu</name><uri>http://www.cnblogs.com/luohoufu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luohoufu/archive/2011/02/11/1951155.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luohoufu/archive/2011/02/11/1951155.html"/><content type="html">&lt;div&gt;&lt;p&gt;不需废话，直接上代码，注释很详细了，看懂肯定没问题啊！&lt;/p&gt; &lt;p&gt;DECLARE @Date&amp;nbsp; DATETIME&lt;br /&gt; SET @Date=GETDATE()&lt;br /&gt; &amp;#8211;前一天，给定日期的前一天&lt;br /&gt; SELECT DATEADD(DAY,-1,@Date) AS &amp;#8216;前一天&amp;#8217;&lt;br /&gt; &amp;#8211;后一天，给定日期的后一天&lt;br /&gt; SELECT DATEADD(DAY,1,@Date) AS &amp;#8216;后一天&amp;#8217;&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;月初，计算给定日期所在月的第一天&lt;br /&gt; &amp;#8211;这个计算的技巧是先计算当前日期到&amp;#8220;1900-01-01&amp;#8221;的时间间隔数，然后把它加到&amp;#8220;1900-01-01&amp;#8221;上来获得特殊的日期，这个技巧可以用&amp;#8212;来计算很多不同的日期。&lt;br /&gt; DECLARE @Date&amp;nbsp; DATETIME&lt;br /&gt; SET @Date=GETDATE()&lt;br /&gt; SELECT DATEADD(MONTH,DATEDIFF(MONTH,&amp;#8217;1900-01-01&amp;#8242;,@Date),&amp;#8217;1900-01-01&amp;#8242;) AS &amp;#8216;所在月的第一天&amp;#8217;&lt;br /&gt; &amp;#8211;精简算法，根据SQL Server的时间表示方式可知，&amp;#8217;1900-01-01&amp;#8242; 可以用0代替&lt;br /&gt; SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0) AS &amp;#8216;所在月的第一天&amp;#8217;&lt;br /&gt; &amp;#8211;上面两种算法精确到天 时分秒均为00:00:00.000&lt;br /&gt; &amp;#8211;下面算法课以保留时分秒&lt;br /&gt; &amp;#8211;思路：用给定日期减去月第一天与给定日期差的天数&lt;br /&gt; SELECT DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;月末，计算给定日期所在月的最后一天&lt;br /&gt; DECLARE @Date&amp;nbsp; DATETIME&lt;br /&gt; SET @Date=GETDATE()&lt;br /&gt; &amp;#8211;思路：当前月的下一月1号在减1天&lt;br /&gt; SELECT DATEADD(DAY,-1,DATEADD(MONTH,1+DATEDIFF(MONTH,&amp;#8217;1900-01-01&amp;#8242;,@Date),&amp;#8217;1900-01-01&amp;#8242;)) AS &amp;#8216;所在月的最一天&amp;#8217;&lt;br /&gt; SELECT DATEADD(MONTH,1+DATEDIFF(MONTH,&amp;#8217;1900-01-01&amp;#8242;,@Date),&amp;#8217;1900-01-01&amp;#8242;)-1 AS &amp;#8216;所在月的最一天&amp;#8217;&lt;br /&gt; &amp;#8211;1900-01-01 用0代替&lt;br /&gt; SELECT DATEADD(DAY,-1,DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Date),0)) AS &amp;#8216;所在月的最一天&amp;#8217;&lt;br /&gt; SELECT DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Date),0)-1 AS &amp;#8216;所在月的最一天&amp;#8217;&lt;br /&gt; &amp;#8211;思路：与月初计算思路相同&lt;br /&gt; SELECT DATEADD(MONTH,DATEDIFF(MONTH,&amp;#8217;1989-12-31&amp;#8242;,@Date),&amp;#8217;1989-12-31&amp;#8242;) AS &amp;#8216;所在月的最一天&amp;#8217;&lt;br /&gt; &amp;#8211;精简算法，&amp;#8217;1989-12-31&amp;#8242; 用-1代替&lt;br /&gt; SELECT DATEADD(MONTH,DATEDIFF(MONTH,-1,@Date),-1) AS &amp;#8216;所在月的最一天&amp;#8217;&lt;br /&gt; &amp;#8211;保留时分秒的算法&lt;br /&gt; SELECT DATEADD(DAY,-1,DATEADD(MONTH,1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)))&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;其他月计算&lt;/p&gt; &lt;p&gt;&amp;#8211;计算给定日期所在月的上月第一天&lt;br /&gt; DECLARE @Date&amp;nbsp; DATETIME&lt;br /&gt; SET @Date=GETDATE()&lt;br /&gt; &amp;#8211;当前月第一天减去一个月&lt;br /&gt; SELECT DATEADD(MONTH,-1,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0)) AS &amp;#8216;上月第一天&amp;#8217;&lt;br /&gt; &amp;#8211;简化&lt;br /&gt; SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)-1,0) AS &amp;#8216;上月第一天&amp;#8217;&lt;br /&gt; &amp;#8211;另一种当前月第一天算法&lt;br /&gt; SELECT DATEADD(MONTH,-1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)) &amp;#8216;上月第一天&amp;#8217;&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;计算给定日期所在月的上月最后一天&lt;br /&gt; DECLARE @Date&amp;nbsp; DATETIME&lt;br /&gt; SET @Date=GETDATE()&lt;br /&gt; &amp;#8211;当前月第一天减去一天&lt;br /&gt; SELECT DATEADD(DAY,-1,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0)) AS &amp;#8216;上月最后一天&amp;#8217;&lt;br /&gt; &amp;#8211;另一种当前月第一天算法&lt;br /&gt; SELECT DATEADD(DAY,-1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)) &amp;#8216;上月最后一天&amp;#8217;&lt;br /&gt; SELECT DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)-1 &amp;#8216;上月最后一天&amp;#8217;&lt;br /&gt; &amp;#8211;另一种算法，不能用当前月的最后一天加一个月，因为当前月可能是30天。&lt;br /&gt; &amp;#8211;例如 SELECT DATEADD(MONTH,1,&amp;#8217;2010-06-30&amp;#8242;) &amp;#8211;结果是2010-07-30而不是2010-07-31，&lt;br /&gt; &amp;#8211;这也是月末算法采用下月第一天减1天计算的原因&lt;br /&gt; &amp;#8211;但是如果计算月是31天择无此问题&lt;br /&gt; &amp;#8211;例如 SELECT DATEADD(MONTH,1,&amp;#8217;2010-05-31&amp;#8242;) &amp;#8211;结果是2010-06-30&lt;br /&gt; &amp;#8211;因此下面算法是正确的，-1 表示&amp;#8217;1899-12-31 00:00:00.000&amp;#8242;&amp;#8211; SELECT CONVERT(DATETIME,-1)&lt;br /&gt; SELECT DATEADD(MONTH,DATEDIFF(MONTH,-1,@Date)-1,-1)&lt;br /&gt; &amp;#8211;另一种当前月算法&lt;br /&gt; SELECT DATEADD(DAY,-1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)) &amp;#8216;上月最后一天&amp;#8217;&lt;br /&gt; &amp;#8211;简化&lt;br /&gt; SELECT DATEADD(DAY,0-DATEPART(DAY,@Date),@Date) &amp;#8216;上月最后一天&amp;#8217;&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;计算给定日期所在月的下月第一天&lt;br /&gt; DECLARE @Date&amp;nbsp; DATETIME&lt;br /&gt; SET @Date=GETDATE()&lt;br /&gt; &amp;#8211;当前月第一天加一个月&lt;br /&gt; SELECT DATEADD(MONTH,1,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0)) AS &amp;#8216;下月第一天&amp;#8217;&lt;br /&gt; &amp;#8211;简化&lt;br /&gt; SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)+1,0) AS &amp;#8216;下月第一天&amp;#8217;&lt;br /&gt; &amp;#8211;另一种当前月第一天算法&lt;br /&gt; SELECT DATEADD(MONTH,1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)) &amp;#8216;下月第一天&amp;#8217;&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;计算给定日期所在月的下月最后一天&lt;br /&gt; DECLARE @Date&amp;nbsp; DATETIME&lt;br /&gt; SET @Date=GETDATE()&lt;br /&gt; &amp;#8211;当前月第一天加2个月再减去1天&lt;br /&gt; SELECT DATEADD(DAY,-1,DATEADD(MONTH,2,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0))) AS &amp;#8216;下月最后一天&amp;#8217;&lt;br /&gt; &amp;#8211;简化&lt;br /&gt; SELECT DATEADD(DAY,-1,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)+2,0)) AS &amp;#8216;下月最后一天&amp;#8217;&lt;br /&gt; SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)+2,0)-1 AS &amp;#8216;下月最后一天&amp;#8217;&lt;br /&gt; &amp;#8211;另一种算法&lt;br /&gt; SELECT DATEADD(MONTH,DATEDIFF(MONTH,-1,@Date)+1,-1) &amp;#8216;下月最后一天&amp;#8217;&lt;br /&gt; &amp;#8211;另一种当前月第一天算法&lt;br /&gt; SELECT DATEADD(DAY,-1,DATEADD(MONTH,2,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date))) &amp;#8216;下月最后一天&amp;#8217;&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;所在星期的第一天，计算给定日期所在星期的第1天(星期日为第一天)&lt;br /&gt; DECLARE @Date&amp;nbsp; DATETIME&lt;br /&gt; SET @Date= GETDATE()&lt;br /&gt; &amp;#8211;与SQL Server语言版本相关的算法&lt;br /&gt; &amp;#8211;思路：当前日期+星期日(每周的第1天)与当前日期的差的天数&lt;br /&gt; &amp;#8211;DATEPART(WEEKDAY,DATE)的返回值与@@DATEFIRST相关&lt;br /&gt; SET DATEFIRST 7 &amp;#8212; 或者设置为美国英语SET LANGUAGE us_english; (星期日为第一天)&lt;br /&gt; SELECT DATEADD(WEEKDAY,1-DATEPART(WEEKDAY,@Date),@Date) AS &amp;#8216;所在星期的第一天，星期日&amp;#8217;&lt;br /&gt; &amp;#8211;星期日，与SQL Server语言版本或@@DATEFIRST无关&lt;br /&gt; &amp;#8211;&amp;#8217;1989-12-31&amp;#8242; 是星期日，&amp;#8217;1989-12-31&amp;#8242; 再加上(当前日期与1989-12-31差的星期数)个星期&lt;br /&gt; SELECT DATEADD(WEEK,DATEDIFF(WEEK,-1,@Date),-1) AS &amp;#8216;所在星期的星期日&amp;#8217;&lt;br /&gt; &amp;#8211;或者&lt;br /&gt; SELECT DATEADD(WEEK,DATEDIFF(WEEK,6,@Date),6) AS &amp;#8216;所在星期的星期日&amp;#8217;&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;所在星期的第二天，计算给定日期所在星期的第2天(星期日为第一天)&lt;br /&gt; DECLARE @Date&amp;nbsp; DATETIME&lt;br /&gt; SET @Date= GETDATE()&lt;br /&gt; &amp;#8211;思路：当前日期+星期一(每周的第2天)与当前日期的差的天数&lt;br /&gt; &amp;#8211;DATEPART(WEEKDAY,DATE)的返回值与@@DATEFIRST相关&lt;br /&gt; SET DATEFIRST 7 &amp;#8212; 或者设置为美国英语SET LANGUAGE us_english; (星期日为第一天)&lt;br /&gt; SELECT DATEADD(DAY,2-DATEPART(WEEKDAY,@Date),@Date) AS &amp;#8216;所在星期的第二天，星期一&amp;#8217;&lt;br /&gt; &amp;#8211;星期一，与SQL Server语言版本或@@DATEFIRST无关&lt;br /&gt; &amp;#8211;&amp;#8217;1900-01-01&amp;#8242; 是星期一，&amp;#8217;1900-01-01&amp;#8242; 再加上(当前日期与1900-01-01差的星期数)个星期&lt;br /&gt; SELECT DATEADD(WEEK,DATEDIFF(WEEK,0,@Date),0) AS &amp;#8216;所在星期的星期一&amp;#8217;&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;上个星期第一天，计算给定日期所在星期的上一个星期日(星期日为第一天)&lt;br /&gt; DECLARE @Date&amp;nbsp; DATETIME&lt;br /&gt; SET @Date= GETDATE()&lt;br /&gt; &amp;#8211;思路：当前日志所在星期的星期日再减1周&lt;br /&gt; &amp;#8211;DATEPART(WEEKDAY,DATE)的返回值与@@DATEFIRST相关&lt;br /&gt; SET DATEFIRST 7 &amp;#8212; 或者设置为美国英语SET LANGUAGE us_english; (星期日为第一天)&lt;br /&gt; SELECT DATEADD(WEEK,-1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS &amp;#8216;上个星期第一天，星期日&amp;#8217;&lt;br /&gt; &amp;#8211;一周等于7天&lt;br /&gt; SELECT DATEADD(DAY,-7,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS &amp;#8216;上个星期第一天，星期日&amp;#8217;&lt;br /&gt; &amp;#8211;简化&lt;br /&gt; SELECT DATEADD(DAY,-6-DATEPART(WEEKDAY,@Date),@Date) AS &amp;#8216;上个星期第一天，星期日&amp;#8217;&lt;br /&gt; &amp;#8211;上个星期日，与SQL Server语言版本或@@DATEFIRST无关&lt;br /&gt; SELECT DATEADD(WEEK,-1+DATEDIFF(WEEK,-1,@Date),-1) AS &amp;#8216;上个星期日&amp;#8217;&lt;br /&gt; &amp;#8211;或者&lt;br /&gt; SELECT DATEADD(WEEK,DATEDIFF(WEEK,6,@Date),-1) AS &amp;#8216;上个星期日&amp;#8217;&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;下个星期第一天，计算给定日期所在星期的下一个星期日(星期日为第一天)&lt;br /&gt; DECLARE @Date&amp;nbsp; DATETIME&lt;br /&gt; SET @Date= GETDATE()&lt;br /&gt; &amp;#8211;思路：当前日志所在星期的星期日再加1周&lt;br /&gt; &amp;#8211;DATEPART(WEEKDAY,DATE)的返回值与@@DATEFIRST相关&lt;br /&gt; SET DATEFIRST 7 &amp;#8212; 或者设置为美国英语SET LANGUAGE us_english; (星期日为第一天)&lt;br /&gt; SELECT DATEADD(WEEK,1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS &amp;#8216;下个星期第一天，星期日&amp;#8217;&lt;br /&gt; &amp;#8211;一周等于7天&lt;br /&gt; SELECT DATEADD(DAY,7,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS &amp;#8216;下个星期第一天，星期日&amp;#8217;&lt;br /&gt; &amp;#8211;简化&lt;br /&gt; SELECT DATEADD(DAY,8-DATEPART(WEEKDAY,@Date),@Date) AS &amp;#8216;下个星期第一天，星期日&amp;#8217;&lt;br /&gt; &amp;#8211;下个星期日，与SQL Server语言版本或@@DATEFIRST无关&lt;br /&gt; SELECT DATEADD(WEEK,1+DATEDIFF(WEEK,-1,@Date),-1) AS &amp;#8216;下个星期日&amp;#8217;&lt;br /&gt; &amp;#8211;或者&lt;br /&gt; SELECT DATEADD(WEEK,DATEDIFF(WEEK,-1,@Date),6) AS &amp;#8216;下个星期日&amp;#8217;&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;判断给定日期是星期几&lt;br /&gt; DECLARE @Date&amp;nbsp; DATETIME&lt;br /&gt; SET @Date= GETDATE()&lt;br /&gt; &amp;#8211;DATEPART(WEEKDAY,DATE)的返回值与@@DATEFIRST相关&lt;br /&gt; SET DATEFIRST 7 &amp;#8212; 或者设置为美国英语SET LANGUAGE us_english; (星期日为第一天)&lt;br /&gt; SELECT DATEPART(WEEKDAY,@Date) &amp;#8211;返回值 1-星期日，2-星期一，3-星期二&amp;#8230;&amp;#8230;7-星期六&lt;br /&gt; &amp;#8211;上面算法与SQL 语言版本或 @@DATEFIRST 相关&lt;br /&gt; &amp;#8211;下面算法与SQL Server语言版本或@@DATEFIRST无关&lt;br /&gt; SELECT DATENAME(WEEKDAY,@Date) &amp;#8216;星期&amp;#8217;&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;年度计算&lt;br /&gt; DECLARE @Date&amp;nbsp; DATETIME&lt;br /&gt; SET @Date=GETDATE()&lt;br /&gt; &amp;#8211;年初，计算给定日期所在年的第一天&lt;br /&gt; SELECT DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),0) AS &amp;#8216;所在年的第一天&amp;#8217;&lt;br /&gt; &amp;#8211;年末，计算给定日期所在年的最后一天&lt;br /&gt; SELECT DATEADD(YEAR,DATEDIFF(YEAR,-1,@Date),-1) AS &amp;#8216;所在年的最后一天&amp;#8217;&lt;br /&gt; &amp;#8211;上一年年初，计算给定日期所在年的上一年的第一天&lt;br /&gt; SELECT DATEADD(YEAR,DATEDIFF(YEAR,-0,@Date)-1,0) AS &amp;#8216;所在年的上一年的第一天&amp;#8217;&lt;br /&gt; &amp;#8211;上一年年末，计算给定日期所在年的上一年的最后一天&lt;br /&gt; SELECT DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),-1) AS &amp;#8216;所在年的上一年的最后一天&amp;#8217;&lt;br /&gt; &amp;#8211;下一年年初，计算给定日期所在年的下一年的第一天&lt;br /&gt; SELECT DATEADD(YEAR,1+DATEDIFF(YEAR,0,@Date),0) AS &amp;#8216;所在年的下一年的第一天&amp;#8217;&lt;br /&gt; &amp;#8211;下一年年末，计算给定日期所在年的下一年的最后一天&lt;br /&gt; SELECT DATEADD(YEAR,1+DATEDIFF(YEAR,-1,@Date),-1) AS &amp;#8216;所在年的下一年的最后一天&amp;#8217;&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;季度计算&lt;br /&gt; DECLARE @Date&amp;nbsp; DATETIME&lt;br /&gt; SET @Date=GETDATE()&lt;br /&gt; &amp;#8211;季度初，计算给定日期所在季度的第一天&lt;br /&gt; SELECT DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),0) AS &amp;#8216;当前季度的第一天&amp;#8217;&lt;br /&gt; &amp;#8211;季度末，计算给定日期所在季度的最后一天&lt;br /&gt; SELECT DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),-1) AS &amp;#8216;当前季度的最后一天&amp;#8217;&lt;br /&gt; &amp;#8211;上个季度初&lt;br /&gt; SELECT DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date)-1,0) AS &amp;#8216;当前季度的上个季度初&amp;#8217;&lt;br /&gt; &amp;#8211;上个季度末&lt;br /&gt; SELECT DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),-1) AS &amp;#8216;当前季度的上个季度末&amp;#8217;&lt;br /&gt; &amp;#8211;下个季度初&lt;br /&gt; SELECT DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),0) AS &amp;#8216;当前季度的下个季度初&amp;#8217;&lt;br /&gt; &amp;#8211;下个季度末&lt;br /&gt; SELECT DATEADD(QUARTER,2+DATEDIFF(QUARTER,0,@Date),-1) AS &amp;#8216;当前季度的下个季度末&amp;#8217;&lt;br /&gt; GO&lt;br /&gt; &amp;#8211;计算给定日期所在月的天数&lt;br /&gt; DECLARE @Date DATETIME;&lt;br /&gt; SET @Date = GETDATE()&lt;br /&gt; &amp;#8211;本月度第一天与下月度第一天所差的天数&lt;br /&gt; SELECT DATEDIFF(DAY,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0),DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Date),0))&lt;br /&gt; &amp;#8211;借助变量简化&lt;br /&gt; SELECT @Date = DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0) &amp;#8211;本月度第一天&lt;br /&gt; SELECT DATEDIFF(DAY,@Date,DATEADD(MONTH,1,@Date))&lt;br /&gt; &amp;#8211;另一种思路：给定月最后一天的日期，记为本月天数&lt;br /&gt; SELECT DAY(DATEADD(MONTH,DATEDIFF(MONTH,-1,@Date),-1))&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;计算给定日期所在季度的天数&lt;br /&gt; DECLARE @Date DATETIME;&lt;br /&gt; SET @Date = GETDATE()&lt;br /&gt; &amp;#8211;本季度第一天与下季度第一天所差的天数&lt;br /&gt; SELECT DATEDIFF(DAY,DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),0),DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),0))&lt;br /&gt; &amp;#8211;借助变量简化&lt;br /&gt; SELECT @Date = DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),0) &amp;#8211;本季度第一天&lt;br /&gt; SELECT DATEDIFF(DAY,@Date,DATEADD(QUARTER,1,@Date))&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;计算给定日期所在年度的天数&lt;br /&gt; DECLARE @Date DATETIME;&lt;br /&gt; SET @Date = GETDATE()&lt;br /&gt; &amp;#8211;本年度第一天与下年度第一天所差的天数&lt;br /&gt; SELECT DATEDIFF(DAY,DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),0),DATEADD(YEAR,1+DATEDIFF(YEAR,0,@Date),0))&lt;br /&gt; &amp;#8211;借助变量简化&lt;br /&gt; SELECT @Date = DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),0) &amp;#8211;本年度第一天&lt;br /&gt; SELECT DATEDIFF(DAY,@Date,DATEADD(YEAR,1,@Date))&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;判断给定日期所在年是否闰年&lt;br /&gt; &amp;#8211;根据全年总天数判断&lt;br /&gt; DECLARE @Date DATETIME;&lt;br /&gt; SET @Date = GETDATE()&lt;br /&gt; SELECT CASE DATEDIFF(DAY,DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),0),DATEADD(YEAR,1+DATEDIFF(YEAR,0,@Date),0))&lt;br /&gt; &amp;nbsp; WHEN 365 THEN &amp;#8216;平年&amp;#8217; ELSE &amp;#8216;闰年&amp;#8217; END&lt;br /&gt; &amp;#8211;根据二月天数判断&lt;br /&gt; &amp;#8211;给日期的上一年最后一天加2个月，即为当年2月最后一天&lt;br /&gt; SELECT CASE DAY(DATEADD(MONTH,2,DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),-1))) WHEN 28 THEN &amp;#8216;平年&amp;#8217; ELSE &amp;#8216;闰年&amp;#8217; END&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;计算给定日期是当年的第几天&lt;br /&gt; DECLARE @Date DATETIME;&lt;br /&gt; SET @Date = GETDATE()&lt;br /&gt; SELECT DATEPART(DAYOFYEAR,@Date) [DayOfYear];&lt;br /&gt; SELECT DATENAME(DAYOFYEAR,@Date)&amp;nbsp; [DayOfYear];&lt;br /&gt; &amp;#8211;另一种思路：当前日期与上年最后一天差的天数&lt;br /&gt; SELECT DATEDIFF(DAY,DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),-1),@Date)[DayOfYear]&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;计算给定日期是当年的第几周&lt;br /&gt; DECLARE @Date DATETIME;&lt;br /&gt; SET @Date = GETDATE()&lt;br /&gt; SELECT DATEPART(WEEK,@Date) [WeekOfYear]; &amp;#8211;返回int型&lt;br /&gt; SELECT DATENAME(WEEK,@Date) [WeekOfYear]; &amp;#8211;返回varchar型&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;计算给定日期是当年的第几月&lt;br /&gt; DECLARE @Date DATETIME;&lt;br /&gt; SET @Date = GETDATE()&lt;br /&gt; SELECT DATEPART(MONTH,@Date) [MonthOfYear]; &amp;#8211;返回int型&lt;br /&gt; SELECT DATENAME(MONTH,@Date) [MonthOfYear]; &amp;#8211;返回varchar型&lt;br /&gt; SELECT MONTH(@Date) [MonthOfYear];&amp;#8211;返回int型&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;计算给定日期是当年的第几季度&lt;br /&gt; DECLARE @Date DATETIME;&lt;br /&gt; SET @Date = GETDATE()&lt;br /&gt; SELECT DATEPART(QUARTER,@Date) [QuarterOfYear]; &amp;#8211;返回int型&lt;br /&gt; SELECT DATENAME(QUARTER,@Date) [QuarterOfYear]; &amp;#8211;返回varchar型&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;计算给定日期是当月的第几周&lt;br /&gt; DECLARE @Date DATETIME;&lt;br /&gt; SET @Date = GETDATE()&lt;br /&gt; &amp;#8211;思路，给定日期是当年的第几周-给定日期所在月第一天是当年的第几周&lt;br /&gt; SELECT DATEPART(WEEK,@Date)-DATEPART(WEEK,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0))+1 [WeekOfMonth]&lt;br /&gt; SELECT DATEPART(WEEK,@Date)-DATEPART(WEEK,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date))+1 [WeekOfMonth]&lt;br /&gt; GO&lt;/p&gt; &lt;p&gt;&amp;#8211;计算给定日期所在月的第一个星期一是哪天&lt;br /&gt; DECLARE @Date DATETIME;&lt;br /&gt; SET @Date = GETDATE()&lt;br /&gt; &amp;#8211;思路，1900-01-01(星期一)加上(给定日志所在月的月6号与1900-01-01差的周数)个周&lt;br /&gt; &amp;#8211;为什么不选7号？如果是7号，那么7好恰好是星期日的话，第一个周一就会算到8号。&lt;br /&gt; &amp;#8211;为什么不选5号？如果5号是星期六，那么周一就跑到上月了。小于5号与这个道理一样。&lt;br /&gt; SELECT DATEADD(WEEK,DATEDIFF(WEEK,0,DATEADD(DAY,6-DATEPART(DAY,@Date),@Date)),0) &amp;#8216;所在月的第一个星期一&amp;#8217;&lt;br /&gt; SELECT DATEADD(WEEK,DATEDIFF(WEEK,0,DATEADD(DAY,6-DATEPART(DAY,@Date),@Date)),7) &amp;#8216;所在月的第二个星期一&amp;#8217;&lt;br /&gt; SELECT DATEADD(WEEK,DATEDIFF(WEEK,0,DATEADD(DAY,6-DATEPART(DAY,@Date),@Date)),1) &amp;#8216;所在月的第一个星期二&amp;#8217;&lt;br /&gt; SELECT DATEADD(WEEK,DATEDIFF(WEEK,0,DATEADD(DAY,6-DATEPART(DAY,@Date),@Date)),8) &amp;#8216;所在月的第二个星期二&amp;#8217;&lt;br /&gt; GO&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/luohoufu/aggbug/1951155.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luohoufu/archive/2011/02/11/1951155.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luohoufu/archive/2010/06/03/1750946.html</id><title type="text">sql server 2008 CDC</title><summary type="text">此文章基于SQL Server 2008 CTP3 (Jun 04, 2007)。 change data capture是在每次对数据库执行insert、update、delete操作的时候，捕获变更数据的方法，这在数据仓库中是常用到的技术手段。Oracle早在9i中就加入了这一特性，在多年后的今天，SQL Server总算是提供了同样的功能。CDC的原理是每次对源表（Source Tables...</summary><published>2010-06-03T09:48:00Z</published><updated>2010-06-03T09:48:00Z</updated><author><name>Robert.H.fu</name><uri>http://www.cnblogs.com/luohoufu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luohoufu/archive/2010/06/03/1750946.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luohoufu/archive/2010/06/03/1750946.html"/><content type="html">&lt;span&gt;此文章基于&lt;span&gt;SQL Server 2008 CTP3 (Jun 04, 2007)&lt;/span&gt;。&lt;/span&gt; &#xD;
&lt;p&gt;&lt;span&gt;change data capture&lt;/span&gt;&lt;span&gt;是在每次对数据库执行&lt;span&gt;insert&lt;/span&gt;、&lt;span&gt;update&lt;/span&gt;、&lt;span&gt;delete&lt;/span&gt;操作的时候，捕获变更数据的方法，这在数据仓库中是常用到的技术手段。&lt;span&gt;Oracle&lt;/span&gt;早在&lt;span&gt;9i&lt;/span&gt;中就加入了这一特性，在多年后的今天，&lt;span&gt;SQL Server&lt;/span&gt;总算是提供了同样的功能。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;CDC&lt;/span&gt;&lt;span&gt;的原理是每次对源表（&lt;span&gt;Source Tables&lt;/span&gt;）执行&lt;span&gt;insert&lt;/span&gt;、&lt;span&gt;update&lt;/span&gt;、&lt;span&gt;delete&lt;/span&gt;时，数据库事务日志会记录&lt;span&gt;DML&lt;/span&gt;造成的变更数据，然后捕获处理过程将日志中源表的变更数据写入变更捕获表（&lt;span&gt;Change Tables&lt;/span&gt;），最后&lt;span&gt;ETL&lt;/span&gt;工具使用&lt;span&gt;CDC&lt;/span&gt;查询函数将变更数据抽取到数据仓库。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;img height="399" alt="" src="http://images.cnblogs.com/cnblogs_com/esestt/CDC01.JPG" width="238" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;相比起在源表建立促发器，&lt;span&gt;CDC&lt;/span&gt;对源表事务性能影响小，而且可以获取变更元数据。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt"&gt;&lt;span style="font-family: '微软雅黑','sans-serif'"&gt;&lt;strong&gt;这里示范一个&lt;span lang="EN-US"&gt;CDC&lt;/span&gt;过程&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;第一步&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 启用数据库的&lt;/span&gt;&lt;span&gt;SQL Server Agent&lt;/span&gt;。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;第二步&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;建立一个数据库&lt;span&gt;Database for CDC&lt;/span&gt;。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;第三步&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;然后以服务角色&lt;span&gt;sysadmin&lt;/span&gt;的用户登录，执行下面的命令：&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&#xD;
&lt;p&gt;&lt;span&gt;执行命令后即启用了数据库的&lt;span&gt;CDC&lt;/span&gt;特性。启用&lt;span&gt;CDC&lt;/span&gt;特性后系统会自动建立名为&lt;span&gt;CDC&lt;/span&gt;的构架和用户，并建立了几个用于&lt;span&gt;CDC&lt;/span&gt;的数据表。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;img height="678" alt="" src="http://images.cnblogs.com/cnblogs_com/esestt/CDC02.JPG" width="339" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;&lt;br /&gt;第四步 &lt;/strong&gt;建立源表&lt;span&gt;Source_Table&lt;/span&gt;，且将&lt;span&gt;column_1&lt;/span&gt;列作为唯一索引&lt;span&gt;IX_Source_Table&lt;br /&gt;&lt;br /&gt;&lt;img height="266" alt="" src="http://images.cnblogs.com/cnblogs_com/esestt/CDC03.JPG" width="392" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;第五步&lt;/strong&gt; 执行命令：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;EXEC sys.sp_cdc_enable_table_change_data_capture &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@source_schema = 'dbo'&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;, @source_name = 'Source_Table'&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;, @role_name = 'change_table_user1'&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;, @index_name = 'IX_Source_Table' &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;, @capture_instance = 'ST_Instance' &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;, @supports_net_changes = 1&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;, @captured_column_list = 'column_key, column_1, column_2' &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;, @filegroup_name = 'PRIMARY';&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" border="1"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="149"&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;参数&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="419"&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;说明&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="149"&gt;&#xD;
&lt;p&gt;&lt;span&gt;source_schema&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="419"&gt;&#xD;
&lt;p&gt;&lt;span&gt;源表的构架名&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="149"&gt;&#xD;
&lt;p&gt;&lt;span&gt;source_name&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="419"&gt;&#xD;
&lt;p&gt;&lt;span&gt;源表名&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="149"&gt;&#xD;
&lt;p&gt;&lt;span&gt;role_name&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="419"&gt;&#xD;
&lt;p&gt;&lt;span&gt;获取变化数据的数据库角色，如果角色不存在，&lt;span&gt;sp_cdc_enable_table_change_data_capture&lt;/span&gt;过程执行成功后会创建角色&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="149"&gt;&#xD;
&lt;p&gt;&lt;span&gt;index_name&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="419"&gt;&#xD;
&lt;p&gt;&lt;span&gt;唯一索引名，不是必须的，如果源表没有主键可以指定唯一索引以确定哪一行数据是变更数据&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="149"&gt;&#xD;
&lt;p&gt;&lt;span&gt;capture_instance&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="419"&gt;&#xD;
&lt;p&gt;&lt;span&gt;捕获实例，一个源表最多可以有两个实例&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="149"&gt;&#xD;
&lt;p&gt;&lt;span&gt;supports_net_changes&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="419"&gt;&#xD;
&lt;p&gt;&lt;span&gt;是否捕捉净变化数据，如果是的话，源表必须有主键或者指定唯一标识列&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="149"&gt;&#xD;
&lt;p&gt;&lt;span&gt;captured_column_list&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="419"&gt;&#xD;
&lt;p&gt;&lt;span&gt;需要在变更捕获表中保存的列&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="149"&gt;&#xD;
&lt;p&gt;&lt;span&gt;filegroup_name&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="419"&gt;&#xD;
&lt;p&gt;&lt;span&gt;变更捕获表使用的文件组&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p&gt;&lt;span&gt;为源表&lt;span&gt;Source_Table&lt;/span&gt;成功建立捕获实例&lt;span&gt;ST_Instance&lt;/span&gt;后，系统自动建立了变更捕获表&lt;span&gt;ST_Instance_CT&lt;/span&gt;，变更捕获表的命名规则是实例名&lt;span&gt;+CT&lt;/span&gt;。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;对源表执行&lt;span&gt;DML&lt;/span&gt;命令时，每行受到&lt;span&gt;DML&lt;/span&gt;影响的数据都会在变更捕获表中保存数据，不同的&lt;span&gt;DML&lt;/span&gt;命令在变更捕获表中保存的数据不同。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" border="1"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="92"&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;命令类型&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="476"&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;每行数据在变更捕获表的保存情况&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="92"&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;insert&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="476"&gt;&#xD;
&lt;p&gt;&lt;span&gt;保存插入行的数据&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="92"&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;delete&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="476"&gt;&#xD;
&lt;p&gt;&lt;span&gt;保存删除行的数据&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="92"&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;update&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="476"&gt;&#xD;
&lt;p&gt;&lt;span&gt;保存两行数据，一行是更新前的，一行是更新后的&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p&gt;&lt;img height="244" alt="" src="http://images.cnblogs.com/cnblogs_com/esestt/CDC04.JPG" width="384" border="0" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;可以看到，变更捕获表中除了我们需要保存源表的三个列外，还多出了&lt;span&gt;5&lt;/span&gt;个以&lt;span&gt;&amp;#8221;__$&amp;#8221;&lt;/span&gt;开头的列，用于记录元数据。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" border="1"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="102"&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;列名&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="466"&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;说明&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="102"&gt;&#xD;
&lt;p&gt;&lt;span&gt;__$start_lsn&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="466"&gt;&#xD;
&lt;p&gt;&lt;span&gt;日志中序列号，在对源表执行&lt;span&gt;DML&lt;/span&gt;时，每个事务有一个日志序列号&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="102"&gt;&#xD;
&lt;p&gt;&lt;span&gt;__$end_lsn&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="466"&gt;&#xD;
&lt;p&gt;&lt;span&gt;空，不使用&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="102"&gt;&#xD;
&lt;p&gt;&lt;span&gt;__$seqval&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="466"&gt;&#xD;
&lt;p&gt;&lt;span&gt;在一个事务中，&lt;span&gt;DML&lt;/span&gt;影响行的序列号&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="102"&gt;&#xD;
&lt;p&gt;&lt;span&gt;__$operation&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="466"&gt;&#xD;
&lt;p&gt;&lt;span&gt;识别执行的是何种&lt;span&gt;DML&lt;/span&gt;，&lt;span&gt;1=delete&lt;/span&gt;，&lt;span&gt;2=insert&lt;/span&gt;，&lt;span&gt;3=update&lt;/span&gt;（更新前），&lt;span&gt;4=update&lt;/span&gt;（更新后）&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="102"&gt;&#xD;
&lt;p&gt;&lt;span&gt;__$update_mask&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="466"&gt;&#xD;
&lt;p&gt;&lt;span&gt;用&lt;span&gt;2&lt;/span&gt;进制标识哪一列发生变更&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p&gt;&lt;span&gt;可以先试着执行下面的命令，以检验&lt;span&gt;CDC&lt;/span&gt;的效果：&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&#xD;
&lt;p&gt;&lt;span&gt;insert dbo.source_table&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;values ('ck_1','c1_1','c2_1','c3_1');&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;insert dbo.source_table&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;values ('ck_2','c1_2','c2_2','c3_2');&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;insert dbo.source_table&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;values ('ck_3','c1_3','c2_3','c3_3');&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;update dbo.source_table &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;set column_2='c2_2_c'&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;where column_key='ck_2';&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;update dbo.source_table &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;set column_key='ck_3_c'&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;where column_key='ck_3';&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;delete dbo.source_table&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;where column_key='ck_3_c';&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;select * from cdc.st_instance_ct;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" border="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td noWrap&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span&gt;__$start_lsn&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span&gt;__$end_lsn&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span&gt;__$seqval&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span&gt;__$operation&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span&gt;__$update_mask&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span&gt;column_key&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span&gt;column_1&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span&gt;column_2&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="right"&gt;&lt;span&gt;1&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x0000002D000001A1002C&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;NULL&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x0000002D000001A10012&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="right"&gt;&lt;span&gt;2&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x07&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;ck_1&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;c1_1&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;c2_1&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="right"&gt;&lt;span&gt;2&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x0000002D000001A90004&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;NULL&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x0000002D000001A90002&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="right"&gt;&lt;span&gt;2&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x07&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;ck_2&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;c1_2&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;c2_2&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="right"&gt;&lt;span&gt;3&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x0000002D000001AB0004&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;NULL&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x0000002D000001AB0002&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="right"&gt;&lt;span&gt;2&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x07&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;ck_3&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;c1_3&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;c2_3&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="right"&gt;&lt;span&gt;4&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x0000002E0000007E0022&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;NULL&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x0000002E0000007E0020&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="right"&gt;&lt;span&gt;3&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x04&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;ck_2&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;c1_2&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;c2_2&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="right"&gt;&lt;span&gt;5&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x0000002E0000007E0022&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;NULL&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x0000002E0000007E0020&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="right"&gt;&lt;span&gt;4&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x04&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;ck_2&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;c1_2&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;c2_2_c&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="right"&gt;&lt;span&gt;6&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x0000002E000000830007&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;NULL&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x0000002E000000830002&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="right"&gt;&lt;span&gt;3&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x01&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;ck_3&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;c1_3&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;c2_3&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="right"&gt;&lt;span&gt;7&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x0000002E000000830007&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;NULL&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x0000002E000000830002&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="right"&gt;&lt;span&gt;4&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x01&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;ck_3_c&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;c1_3&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;c2_3&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="right"&gt;&lt;span&gt;8&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x0000002E0000008A0006&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;NULL&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x0000002E0000008A0004&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="right"&gt;&lt;span&gt;1&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;0x07&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;ck_3_c&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;c1_3&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td noWrap&gt;&#xD;
&lt;p align="left"&gt;&lt;span&gt;c2_3&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p&gt;&lt;span&gt;其中&lt;span&gt;__$update_mask&lt;/span&gt;&lt;span&gt;是受影响的列，对&lt;span&gt;insert&lt;/span&gt;和&lt;span&gt;delete&lt;/span&gt;来说，影响全部的列，所以值是&lt;span&gt;111&lt;/span&gt;（十进制的&lt;span&gt;7&lt;/span&gt;）；对&lt;span&gt;column_key&lt;/span&gt;更新时，值是&lt;span&gt;001&lt;/span&gt;（十进制&lt;span&gt;1&lt;/span&gt;）；对&lt;span&gt;column_2&lt;/span&gt;更新时，值是&lt;span&gt;100&lt;/span&gt;（十进制&lt;span&gt;4&lt;/span&gt;）。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;变更数据查询&lt;/strong&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;变更捕获表是那些&lt;span&gt;CDC&lt;/span&gt;实例名&lt;span&gt;+CT&lt;/span&gt;的表，表中记录了源表的数据变更历史。但通常要按照一定的要求查询这些变更。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;在数据库的&lt;span&gt;CDC&lt;/span&gt;构架中，除了变更捕获表外，还可看到有&lt;span&gt;5&lt;/span&gt;个在数据库启用&lt;span&gt;CDC&lt;/span&gt;时建立的表：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;table cellspacing="0" cellpadding="0" border="1"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="168"&gt;&#xD;
&lt;p&gt;&lt;span&gt;表名&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="400"&gt;&#xD;
&lt;p&gt;&lt;span&gt;作用&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="168"&gt;&#xD;
&lt;p&gt;&lt;span&gt;captured_columns&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="400"&gt;&#xD;
&lt;p&gt;&lt;span&gt;记录所有&lt;span&gt;CDC&lt;/span&gt;实例要保存的列&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="168"&gt;&#xD;
&lt;p&gt;&lt;span&gt;change_tables&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="400"&gt;&#xD;
&lt;p&gt;&lt;span&gt;记录所有的&lt;span&gt;CDC&lt;/span&gt;实例&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="168"&gt;&#xD;
&lt;p&gt;&lt;span&gt;ddl_history&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="400"&gt;&#xD;
&lt;p&gt;&lt;span&gt;记录所有源表由&lt;span&gt;DDL&lt;/span&gt;产生的变更&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="168"&gt;&#xD;
&lt;p&gt;&lt;span&gt;index_columns&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="400"&gt;&#xD;
&lt;p&gt;&lt;span&gt;记录&lt;span&gt;CDC&lt;/span&gt;实例使用的唯一索引&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="168"&gt;&#xD;
&lt;p&gt;&lt;span&gt;lsn_time_mapping&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="400"&gt;&#xD;
&lt;p&gt;&lt;span&gt;记录日志序列号的时间，每个&lt;span&gt;DML&lt;/span&gt;事务都有一个日志序列号&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;除了关联查询这些&lt;span&gt;CDC&lt;/span&gt;表外，&lt;span&gt;SQL Server 2K8&lt;/span&gt;里还有多个&lt;span&gt;CDC&lt;/span&gt;函数和储存过程，用于查询变更数据。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;1．&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;日志序列号与事务时间的变换&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;在&lt;span&gt;change tables&lt;/span&gt;中没有记录事务发生的时间，只记录了事务的日志序列号（&lt;span&gt;lsn&lt;/span&gt;），而日志序号号对应的时间记录在&lt;span&gt;lsn_time_mapping&lt;/span&gt;表中。&lt;span&gt;sys.fn_cdc_map_lsn_to_time&lt;/span&gt;和&lt;span&gt;sys.fn_cdc_map_time_to_lsn&lt;/span&gt;是两个用于转换日志序列号与事务时间的函数；&lt;span&gt;sys.fn_cdc_map_time_to_lsn&lt;/span&gt;用于获取某一时间段内的所有日志序列号。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;2．&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;最小和最大日志序列号&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;sys.fn_cdc_get_min_lsn&lt;/span&gt;&lt;span&gt;和&lt;/span&gt;&lt;span&gt; &lt;span&gt;sys.fn_cdc_get_max_lsn&lt;/span&gt;&lt;span&gt;函数获得目前存在的最大和最小日志序列号。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;3．&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;查询变更数据&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;cdc.fn_cdc_get_all_changes_&amp;lt;capture_instance&amp;gt;&lt;/span&gt;&lt;span&gt;函数用于查询实例中满足要求的所有变更记录。&lt;span&gt;cdc.fn_cdc_get_net_changes_&amp;lt;capture_instance&amp;gt;&lt;/span&gt;函数用于查询实例中满足要求的净变更记录，所谓的净变更记录既是最后一次&lt;span&gt;DML&lt;/span&gt;操作后源表的记录，比如在对一行数据进行了多次&lt;span&gt;update&lt;/span&gt;后，使用&lt;span&gt;cdc.fn_cdc_get_all_changes_&amp;lt;capture_instance&amp;gt;&lt;/span&gt;会返回所有更新前和更新后的数据记录，而净变更只返回最后一次更新后的记录。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;4．&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;获取变更列&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;在对源表进行&lt;span&gt;update&lt;/span&gt;操作后，有时需要知道更新的是哪一列。在变更捕获表中&lt;span&gt;__$update_mask&lt;/span&gt;字段保存变更列的&lt;span&gt;2&lt;/span&gt;进制编码。&lt;span&gt;sys.fn_cdc_is_bit_set&lt;/span&gt;用于返回列序的二进制值，比如要知道第&lt;span&gt;3 &lt;/span&gt;列是否变更，使用&lt;span&gt;sys.fn_cdc_is_bit_set( 3, __$update_mask )&lt;/span&gt;，若返回&lt;span&gt;1&lt;/span&gt;，则表明第&lt;span&gt;3&lt;/span&gt;列变更，返回&lt;span&gt;0&lt;/span&gt;，则表明没有变更。另外要知道实例中的列是第几列，可使用&lt;span&gt;sys.fn_cdc_get_column_ordinal&lt;/span&gt;函数。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;5．&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;获取源表&lt;span&gt;DDL&lt;/span&gt;变更历史&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;sys.sp_cdc_get_ddl_history&lt;/span&gt;&lt;span&gt;函数用于查询对源表使用数据定义语句的历史，通常在用&lt;span&gt;DDL&lt;/span&gt;改变源表时，也要使用同样的&lt;span&gt;DLL&lt;/span&gt;改变变更捕获表。比如删除源表中某一列，或者将某一列的值类型由&lt;span&gt;int&lt;/span&gt;改成&lt;span&gt;long&lt;/span&gt;，那么变更捕获表也要跟着变化。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;变更数据的清理&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;变更捕获表中数据要周期性的加载到数据仓库中，被加载后的数据就要清理掉，否则用于&lt;span&gt;cdc&lt;/span&gt;的数据会越来越多。使用&lt;span&gt;sys.sp_cdc_cleanup_change_table&lt;/span&gt;&lt;span&gt;存储过程清除变更数据。此外，在启用数据库&lt;span&gt;CDC&lt;/span&gt;时，系统自动在&lt;span&gt;SQL Server Agent&lt;/span&gt;中加入每日清除变更数据的作业。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;停用&lt;span&gt;CDC&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;sys.sp_cdc_disable_table_change_data_capture&lt;/span&gt;&lt;span&gt;存储过程用于停用&lt;span&gt;CDC&lt;/span&gt;实例。&lt;span&gt;sys.sp_cdc_disable_db_change_data_capture&lt;/span&gt;存储过程用于停用数据库&lt;span&gt;CDC&lt;/span&gt;功能。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;小结&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;CDC&lt;/span&gt;&lt;span&gt;是在&lt;span&gt;SQL Server 2K8 CTP3&lt;/span&gt;中才加入特性，在前两个&lt;span&gt;CTP&lt;/span&gt;中还没有出现过，可以看到还有些不尽人意，没有&lt;span&gt;Oracle&lt;/span&gt;那么完善，希望在正式版中能进一步改进。&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;将&lt;span&gt;cdc.st_instance_ct&lt;/span&gt;表中数据列出来后如下：&lt;/span&gt; &lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;这个命令指定捕获源表&lt;span&gt;Source_Table&lt;/span&gt;的变化，参数说明如下：&lt;/span&gt; &#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;USE [Database for CDC];&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;GO&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;EXECUTE [sys].[sp_cdc_enable_db_change_data_capture];&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;GO&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;img src="http://www.cnblogs.com/luohoufu/aggbug/1750946.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luohoufu/archive/2010/06/03/1750946.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luohoufu/archive/2010/06/01/1748890.html</id><title type="text">sql server &amp;amp; excel</title><summary type="text">二、SQL SERVER 和EXCEL的数据导入导出1、在SQL SERVER里查询Excel数据:-- ======================================================SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\book1.xls";User ID=A...</summary><published>2010-06-01T02:36:00Z</published><updated>2010-06-01T02:36:00Z</updated><author><name>Robert.H.fu</name><uri>http://www.cnblogs.com/luohoufu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luohoufu/archive/2010/06/01/1748890.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luohoufu/archive/2010/06/01/1748890.html"/><content type="html">&lt;p&gt;二、SQL SERVER 和EXCEL的数据导入导出&lt;br /&gt;1、在SQL SERVER里查询Excel数据:&lt;br /&gt;-- ======================================================&lt;br /&gt;SELECT * &lt;br /&gt;FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',&lt;br /&gt;'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]&lt;br /&gt;下面是个查询的示例，它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。&lt;br /&gt;SELECT * &lt;br /&gt;FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',&lt;br /&gt;&amp;nbsp; 'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions&lt;br /&gt;-------------------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;2、将Excel的数据导入SQL server :&lt;br /&gt;-- ======================================================&lt;br /&gt;SELECT * into newtable&lt;br /&gt;FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',&lt;br /&gt;&amp;nbsp; 'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]&lt;br /&gt;实例:&lt;br /&gt;SELECT * into newtable&lt;br /&gt;FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',&lt;br /&gt;&amp;nbsp; 'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions&lt;br /&gt;-------------------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;3、将SQL SERVER中查询到的数据导成一个Excel文件&lt;br /&gt;-- ======================================================&lt;br /&gt;T-SQL代码：&lt;br /&gt;EXEC master..xp_cmdshell 'bcp 库名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'&lt;br /&gt;参数：S 是SQL服务器名；U是用户；P是密码&lt;br /&gt;说明：还可以导出文本文件等多种格式&lt;br /&gt;实例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'&lt;br /&gt;EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword'&lt;br /&gt;在VB6中应用ADO导出EXCEL文件代码： &lt;br /&gt;Dim cn&amp;nbsp; As New ADODB.Connection&lt;br /&gt;cn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"&lt;br /&gt;cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM 库名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword'"&lt;br /&gt;------------------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;4、在SQL SERVER里往Excel插入数据:&lt;br /&gt;-- ======================================================&lt;br /&gt;insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',&lt;br /&gt;'Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)&lt;/p&gt;&#xD;
&lt;p&gt;T-SQL代码：&lt;br /&gt;INSERT INTO&amp;nbsp; &lt;br /&gt;OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',&amp;nbsp; &lt;br /&gt;'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$]&amp;nbsp; &lt;br /&gt;(bestand, produkt) VALUES (20, 'Test')&amp;nbsp; &lt;br /&gt;-------------------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;用OPENROWSET的方法:&lt;/p&gt;&#xD;
&lt;p&gt;--如果接受数据导入的表已经存在&lt;br /&gt;insert into 表 select * from &lt;br /&gt;OPENROWSET('MICROSOFT.JET.OLEDB.4.0'&lt;br /&gt;,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)&lt;/p&gt;&#xD;
&lt;p&gt;--如果导入数据并生成表&lt;br /&gt;select * into 表 from &lt;br /&gt;OPENROWSET('MICROSOFT.JET.OLEDB.4.0'&lt;br /&gt;,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;/*===================================================================*/&lt;br /&gt;--从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:&lt;br /&gt;insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0'&lt;br /&gt;,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)&lt;br /&gt;select * from 表&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;--如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写:&lt;br /&gt;--导出表的情况&lt;br /&gt;EXEC master..xp_cmdshell 'bcp 数据库名.dbo.表名 out "c:\test.xls" /c /S"服务器名" /U"用户名" -P"密码"'&lt;/p&gt;&#xD;
&lt;p&gt;--导出查询的情况&lt;br /&gt;EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout "c:\test.xls" /c /S"服务器名" /U"用户名" -P"密码"'&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;/*--说明:&lt;br /&gt;c:\test.xls&amp;nbsp; 为导入/导出的Excel文件名.要求文件在SQL服务器上,或者SQL服务器可以访问的共享目录上&lt;br /&gt;sheet1$&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 为Excel文件的工作表名,一般要加上$才能正常使用.&lt;br /&gt;--*/&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/luohoufu/aggbug/1748890.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luohoufu/archive/2010/06/01/1748890.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luohoufu/archive/2009/10/21/1587293.html</id><title type="text">保持一颗好学之心</title><summary type="text">保持一颗好学之心  初见这个题目，许多人可能会对自己相当满意：&amp;#8220;我还是很好学的&amp;#8221;。真的是这样吗？个人之见，有不少人其实并不像他们想象的那么好学，尤其是那些有了一定经验，在某些方面有些过人之处的&amp;#8220;聪明&amp;#8221;之人，随着技术水平和自信心的积累，往往丢失了好学之心，而他们自己却浑然不知。对此，去年Infoq刊登的一片新闻《初心，聆听之术》谈到了如何保持学习心态的...</summary><published>2009-10-21T01:55:00Z</published><updated>2009-10-21T01:55:00Z</updated><author><name>Robert.H.fu</name><uri>http://www.cnblogs.com/luohoufu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luohoufu/archive/2009/10/21/1587293.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luohoufu/archive/2009/10/21/1587293.html"/></entry><entry><id>http://www.cnblogs.com/luohoufu/archive/2009/04/29/1446601.html</id><title type="text">log4net 配置</title><summary type="text">log4net, 是 apache.org 在 log4j的基础上推出的针对.NET程序的开源的日志组件。log4net目前的最新版本是 1.2.10，log4net支持的日志保存方式，可谓丰富之极，包括： 存入SQL SERVER 数据库 存入ACCESS数据库 存入ORACLE数据库 存入DB2数据库 存入SQLLite数据库 生成asp.net 的trace模式的日志 缓存方式的日志 直接输...</summary><published>2009-04-29T15:29:00Z</published><updated>2009-04-29T15:29:00Z</updated><author><name>Robert.H.fu</name><uri>http://www.cnblogs.com/luohoufu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luohoufu/archive/2009/04/29/1446601.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luohoufu/archive/2009/04/29/1446601.html"/></entry><entry><id>http://www.cnblogs.com/luohoufu/archive/2008/10/13/1310412.html</id><title type="text">在ubuntu 下安装Oracle 11g</title><summary type="text">$ sudo su -# apt-get install build-essential libaio1 gawk ksh libmotif3 alien libtool lsb-rpmroot@hardy:~# cd /binroot@hardy:/bin# ls -l /bin/shlrwxrwxrwx 1 root root 4 2008-04-28 19:59 /bin/sh -&amp;gt; ...</summary><published>2008-10-13T15:14:00Z</published><updated>2008-10-13T15:14:00Z</updated><author><name>Robert.H.fu</name><uri>http://www.cnblogs.com/luohoufu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luohoufu/archive/2008/10/13/1310412.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luohoufu/archive/2008/10/13/1310412.html"/></entry><entry><id>http://www.cnblogs.com/luohoufu/archive/2008/10/12/1308918.html</id><title type="text">在oracle中使用自增字段 </title><summary type="text">在oracle中使用自增字段大家都知道,oracle是不支持auto_increment字段的,但可以通过创建Sequence对象来使用自增序列,语法是:SQL代码 createsequenceSEQ_SUBS_ID incrementby1 startwith1 maxvalue10000000000 nocycle;其中SEQ_SUBS_ID为序列名,increment by 1表示步长为1,...</summary><published>2008-10-12T00:18:00Z</published><updated>2008-10-12T00:18:00Z</updated><author><name>Robert.H.fu</name><uri>http://www.cnblogs.com/luohoufu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luohoufu/archive/2008/10/12/1308918.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luohoufu/archive/2008/10/12/1308918.html"/></entry><entry><id>http://www.cnblogs.com/luohoufu/archive/2008/10/05/1304321.html</id><title type="text">今年国庆过得特别快</title><summary type="text">又是一年国庆,参加工作一年后,是该认认真真过过国庆了,以前都没有认真考虑自己该如何过好国庆,一个人过也没多大意思,国庆前打电话给以前的同学,可她们一个个都来不了.倒是我堂哥和伯母想到北京来玩.正好我也闲着没什么事,反正一个人也不好玩嘛,就陪他们一直在北京玩几天.说实在的,黄金周在北京玩实在不咋的,游客太多了,每去一个景点都是人山人海的,每天都要坐车,地铁,走路也挺折腾人的.第二天,我们去了长城,由...</summary><published>2008-10-05T13:26:00Z</published><updated>2008-10-05T13:26:00Z</updated><author><name>Robert.H.fu</name><uri>http://www.cnblogs.com/luohoufu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luohoufu/archive/2008/10/05/1304321.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luohoufu/archive/2008/10/05/1304321.html"/></entry></feed>
