<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>奇风&#039;s Blog &#187; SQL Server2000</title>
	<atom:link href="http://blog.duoday.com/tag/sql-server2000/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.duoday.com</link>
	<description>我的地盘我做主</description>
	<lastBuildDate>Mon, 26 Jul 2010 16:39:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>动网数据库Access 转成SQL Server2000 数据库的一个绝对成功的好方法</title>
		<link>http://blog.duoday.com/2010/307.html</link>
		<comments>http://blog.duoday.com/2010/307.html#comments</comments>
		<pubDate>Tue, 05 Jan 2010 15:34:59 +0000</pubDate>
		<dc:creator>奇风</dc:creator>
				<category><![CDATA[人在网络]]></category>
		<category><![CDATA[Access]]></category>
		<category><![CDATA[SQL Server2000]]></category>
		<category><![CDATA[动网]]></category>

		<guid isPermaLink="false">http://blog.duoday.com/2010/307.html</guid>
		<description><![CDATA[1、必须先安装Microsoft Office Access 2003,和SQL Server2000。2、把旧的动网数据库备份，备份完成后，用Access 2003打开动网旧数据库，在打开时会出现一个警告，不要理会它（安全警告），按打开键，打开后按工具栏——数据库实用工具——转换数据库——转换为2002-2003格式，把数据库转换成2003格式。
2、转换完成后再用Access 2003打开，打开后按工具栏——数据库实用工具——升迁向导——新建数据库——填写SQL数据库登陆名称、密码和要新建的动网数据库（准备转成新的动网数据库），按下一步，按“ 》”键，再按下一步，选取所有选项，再按下一步，选择“不对应用程序作任何改动”，再按完成。
3、打开SQL企业管理器——数据库&#8212;选中相应的数据库&#8212;右键所有任务&#8212;&#8211;生成SQL脚本——常规——全部显示——编写全部对象脚本——确定（记住存放的位置）。
4、用记事本打开刚才生成的SQL脚本，在编辑栏——替换——查找内容为“smalldatetime”替换为“datetime”——替换全部；完成后再在编辑栏——替换——查找内容为“nvarchar”替换为“varcha”——替换全部，完成后保存退出。
5、打开SQL企业管理器——数据库——点击这个数据库下新建的动网数据库，然后在工具栏——SQL查询分析器——文件——打开——“刚才生成的SQL脚本”——查询——执行，然后关闭窗口。
（有的朋友说，用sql版自带的sql脚本也可以，大家不妨试试看）
6、再回到SQL企业管理器——数据库——点击这个数据库下新建的动网数据库，然后打开工具栏——数据库转换服务——导入数据——下一步——数据源“Microsoft Access”文件名“为旧的动网数据库”——下一步——再下一步——从源数据复制表和视图——下一步——全选——下一步——立即运行——下一步——完成。
7、修改动网文件夹两个文件conn.asp和inc\const.asp。
Conn.asp文件修改如下：
Const IsSqlDataBase = 1
SqlDatabaseName = &#8220;MYBBS&#8221;
SqlPassword = &#8220;sa&#8221;
SqlUsername = &#8220;sa&#8221;
SqlLocalName = &#8220;MYSERVER&#8221;
Const.asp文件修改如下：
Const IsBuss=0
8、最后补充：
（1）由于SQL2000里面没有&#8221;自动编号&#8221;,所以你的以&#8221;自动编号&#8221;设置的字段都会变成非空的字段,这就必须手工修改这些字段,并把他的&#8221;标示&#8221;选择&#8221;是&#8221;,种子为&#8221;1&#8243;,增量为&#8221;1&#8243;,
（2）另外,ACCESS2000转换成SQL2000后,原来属性为&#8221;是/否&#8221;的字段将被转换成非空的&#8221;bit&#8221;,这时候你必须修改成自己想要的属性了;
（3）另外,大家要注意对时间函数的把握.ACCESS与SQL是有很多不同的.
根据以上3点，再回到SQL企业管理器——数据库——点击这个数据库下新建的动网数据库，将所有表的字段属性根据以上3点进行修改
补充说明：
自动增加字段需要重写。在access中经常使用的自动编号字段，导入到mssql后，他并不是自增型的int，需要手工设置，把导入后的自动编号字段的标识的“否”改为“是”，“种子”和“递增量”都为“1”，才能成为自动编号
所有的默认值都丢失了。主要是数字类型和日期类型
所有now()，time()，date()要改成getdate()
所有datediff(&#8216;d&#8217;, time1, time2)要改成datediff(day, time1, time2)
所有datediff(&#8216;ww&#8217;, time1, time2)要改成datediff(week, time1, time2)
所有datediff(&#8216;d&#8217;, time1, time2)要改成datediff(day, time1, time2)
在mssql server中，有许多保留字，在access中是没有的，当你把数据导入到mssql的时候，问题就出来了。mssql在导入的时候，会自动给这些字段（包括数据库中的表名）加上“[字段名]”，因此，你必须修改你的脚本，把相应的字段名字（或者表名字）加上中括号，或改变字段名字为不是mssql的保留字
在用access关于时间的使用，大家喜欢使用“select * from aaaa while time=&#8221;&#38;now()”这样的sql语句，然而，在mssql中没有“now()”这个函数，而是使用“getdate()”，所以，所有的sql语句中的“now()”必须换成“getdate()”。
日期函数不相同，在对ACCESS数据库处理中，可用date()、time()等函数，但对
SQL SERVER数据库处理中，只能用datediff,dateadd等函数，而不能用date()、time()等函数。
转化时，跟日期有关的字段，SQL SERVER默认为smalldatetime型，我们最好将它变为datetime型，因为datetime型的范围比smalldatetime型大。有时用smalldatetime型时，转化失败，而用datetime型时，转化成功
isnull(rowname)要改成rowname = null
CursorType要改成1,也就是打开数据库时要给出第一个数字参数为1，否则记录可能
显示不完整
备注类型要通过cast(column as varchar)来使用
true/false类型不能使用，要变为1/0
对此两种数据库进行操作的sql语句不全相同，例如：在对ACCESS数据库进行删除纪录时用：&#8221;delete * from user where id=10&#8243;,而对SQL SERVER数据库进行删除是用：&#8221;delete user where id=10&#8243;.
在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数，像cstr()函数，而对SQL SERVER数据库处理中，却不能用
在access的sql语句中的时间使用变量查询的时候，大家一般使用&#8221;select [...]]]></description>
			<content:encoded><![CDATA[<p>1、必须先安装Microsoft Office Access 2003,和SQL Server2000。2、把旧的动网数据库备份，备份完成后，用Access 2003打开动网旧数据库，在打开时会出现一个警告，不要理会它（安全警告），按打开键，打开后按工具栏——数据库实用工具——转换数据库——转换为2002-2003格式，把数据库转换成2003格式。</p>
<p>2、转换完成后再用Access 2003打开，打开后按工具栏——数据库实用工具——升迁向导——新建数据库——填写SQL数据库登陆名称、密码和要新建的动网数据库（准备转成新的动网数据库），按下一步，按“ 》”键，再按下一步，选取所有选项，再按下一步，选择“不对应用程序作任何改动”，再按完成。</p>
<p>3、打开SQL企业管理器——数据库&#8212;选中相应的数据库&#8212;右键所有任务&#8212;&#8211;生成SQL脚本——常规——全部显示——编写全部对象脚本——确定（记住存放的位置）。</p>
<p>4、用记事本打开刚才生成的SQL脚本，在编辑栏——替换——查找内容为“smalldatetime”替换为“datetime”——替换全部；完成后再在编辑栏——替换——查找内容为“nvarchar”替换为“varcha”——替换全部，完成后保存退出。</p>
<p>5、打开SQL企业管理器——数据库——点击这个数据库下新建的动网数据库，然后在工具栏——SQL查询分析器——文件——打开——“刚才生成的SQL脚本”——查询——执行，然后关闭窗口。<br />
（有的朋友说，用sql版自带的sql脚本也可以，大家不妨试试看）<span id="more-307"></span></p>
<p>6、再回到SQL企业管理器——数据库——点击这个数据库下新建的动网数据库，然后打开工具栏——数据库转换服务——导入数据——下一步——数据源“Microsoft Access”文件名“为旧的动网数据库”——下一步——再下一步——从源数据复制表和视图——下一步——全选——下一步——立即运行——下一步——完成。</p>
<p>7、修改动网文件夹两个文件conn.asp和inc\const.asp。<br />
Conn.asp文件修改如下：<br />
Const IsSqlDataBase = 1<br />
SqlDatabaseName = &#8220;MYBBS&#8221;<br />
SqlPassword = &#8220;sa&#8221;<br />
SqlUsername = &#8220;sa&#8221;<br />
SqlLocalName = &#8220;MYSERVER&#8221;</p>
<p>Const.asp文件修改如下：<br />
Const IsBuss=0</p>
<p>8、最后补充：<br />
（1）由于SQL2000里面没有&#8221;自动编号&#8221;,所以你的以&#8221;自动编号&#8221;设置的字段都会变成非空的字段,这就必须手工修改这些字段,并把他的&#8221;标示&#8221;选择&#8221;是&#8221;,种子为&#8221;1&#8243;,增量为&#8221;1&#8243;,<br />
（2）另外,ACCESS2000转换成SQL2000后,原来属性为&#8221;是/否&#8221;的字段将被转换成非空的&#8221;bit&#8221;,这时候你必须修改成自己想要的属性了;<br />
（3）另外,大家要注意对时间函数的把握.ACCESS与SQL是有很多不同的.<br />
根据以上3点，再回到SQL企业管理器——数据库——点击这个数据库下新建的动网数据库，将所有表的字段属性根据以上3点进行修改</p>
<p>补充说明：</p>
<p>自动增加字段需要重写。在access中经常使用的自动编号字段，导入到mssql后，他并不是自增型的int，需要手工设置，把导入后的自动编号字段的标识的“否”改为“是”，“种子”和“递增量”都为“1”，才能成为自动编号</p>
<p>所有的默认值都丢失了。主要是数字类型和日期类型</p>
<p>所有now()，time()，date()要改成getdate()</p>
<p>所有datediff(&#8216;d&#8217;, time1, time2)要改成datediff(day, time1, time2)</p>
<p>所有datediff(&#8216;ww&#8217;, time1, time2)要改成datediff(week, time1, time2)</p>
<p>所有datediff(&#8216;d&#8217;, time1, time2)要改成datediff(day, time1, time2)</p>
<p>在mssql server中，有许多保留字，在access中是没有的，当你把数据导入到mssql的时候，问题就出来了。mssql在导入的时候，会自动给这些字段（包括数据库中的表名）加上“[字段名]”，因此，你必须修改你的脚本，把相应的字段名字（或者表名字）加上中括号，或改变字段名字为不是mssql的保留字</p>
<p>在用access关于时间的使用，大家喜欢使用“select * from aaaa while time=&#8221;&amp;now()”这样的sql语句，然而，在mssql中没有“now()”这个函数，而是使用“getdate()”，所以，所有的sql语句中的“now()”必须换成“getdate()”。</p>
<p>日期函数不相同，在对ACCESS数据库处理中，可用date()、time()等函数，但对<br />
SQL SERVER数据库处理中，只能用datediff,dateadd等函数，而不能用date()、time()等函数。</p>
<p>转化时，跟日期有关的字段，SQL SERVER默认为smalldatetime型，我们最好将它变为datetime型，因为datetime型的范围比smalldatetime型大。有时用smalldatetime型时，转化失败，而用datetime型时，转化成功</p>
<p>isnull(rowname)要改成rowname = null</p>
<p>CursorType要改成1,也就是打开数据库时要给出第一个数字参数为1，否则记录可能<br />
显示不完整</p>
<p>备注类型要通过cast(column as varchar)来使用</p>
<p>true/false类型不能使用，要变为1/0</p>
<p>对此两种数据库进行操作的sql语句不全相同，例如：在对ACCESS数据库进行删除纪录时用：&#8221;delete * from user where id=10&#8243;,而对SQL SERVER数据库进行删除是用：&#8221;delete user where id=10&#8243;.</p>
<p>在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数，像cstr()函数，而对SQL SERVER数据库处理中，却不能用</p>
<p>在access的sql语句中的时间使用变量查询的时候，大家一般使用&#8221;select * from aaaa while time=#&#8221;&amp;变量名&amp;&#8221;#&#8221;，在mssql中是不行的，他的语法是“select * from aaaa while time=&#8217;&#8221;&amp;变量名&amp;&#8221;&#8216;&#8221;”。（意思是让你把日期时间变量当成字符串来使用，呵呵~~~）</p>
<p>原来ASP里的“Delete * FROM ……”要改为“Delete FROM ……”</p>
<p>有可能rs.update失败，修改成update 表名 set 字段=‘值’ 这样通过（遇到的情况，提示为：<br />
Microsoft OLE DB Provider for SQL Server 错误 &#8216;80040e38&#8242;</p>
<p>乐观并发检查失败。已在此游标之外修改了该行。</p>
<p>/Admin_ClassOrder.asp，行 164 ）</p>
<p>access里面除法可以使用&#8221;\&#8221;或者&#8221;/&#8221;，MSSQL里面只能使用&#8221;/&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.duoday.com/2010/307.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
