access迁移到MSSQL问题

liuqinqin 2006-05-20 08:42:01
在ASP里,我将ACCESS迁移到MSSQL数据库,现在在后台不能添加新闻,数据,不能加到数据库,请大家帮助,大概是什么原因?
...全文
127 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
quweiie 2006-05-20
  • 打赏
  • 举报
回复
access2003 sql server2000
int smallint
text long
yes/no bit
memo text
time date
byyt 2006-05-20
  • 打赏
  • 举报
回复
1、自动增加字段需要重写。在access中经常使用的自动编号字段,导入到mssql后,他并不是自增型的int,需要手工设置,把导入后的自动编号字段的标识的“否”改为“是”,“种子”和“递增量”都为“1”,才能成为自动编号。


2、所有的默认值都丢失了。主要是数字类型和日期类型


3、所有now(),time(),date()要改成getdate()


4、所有datediff('d', time1, time2)要改成datediff(day, time1, time2)


5、所有datediff('ww', time1, time2)要改成datediff(week, time1, time2)


6、所有datediff('d', time1, time2)要改成datediff(day, time1, time2)


7、在mssql server中,有许多保留字,在access中是没有的,当你把数据导入到mssql的时候,问题就出来了。mssql在导入的时候,会自动给这些字段(包括数据库中的表名)加上“[字段名]”,因此,你必须修改你的脚本,把相应的字段名字(或者表名字)加上中括号,或改变字段名字为不是mssql的保留字


8、在用access关于时间的使用,大家喜欢使用“select * from aaaa while time="&now()”这样的sql语句,然而,在mssql中没有“now()”这个函数,而是使用“getdate()”,所以,所有的sql语句中的“now()”必须换成“getdate()”。


9、日期函数不相同,在对ACCESS数据库处理中,可用date()、time()等函数,但对
SQL SERVER数据库处理中,只能用datediff,dateadd等函数,而不能用date()、time()等函数。


10、转化时,跟日期有关的字段,SQL SERVER默认为smalldatetime型,我们最好将它变为datetime型,因为datetime型的范围比smalldatetime型大。有时用smalldatetime型时,转化失败,而用datetime型时,转化成功


11、isnull(rowname)要改成rowname = null


12、CursorType要改成1,也就是打开数据库时要给出第一个数字参数为1,否则记录可能显示不完整


13、备注类型要通过cast(column as varchar)来使用


14、true/false类型不能使用,要变为1/0


15、对此两种数据库进行操作的sql语句不全相同,例如:在对ACCESS数据库进行删除纪录时用:"delete * from user where id=10",而对SQL SERVER数据库进行删除是用:"delete user where id=10".


16、在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数,像cstr()函数,而对SQL SERVER数据库处理中,却不能用


17、在access的sql语句中的时间使用变量查询的时候,大家一般使用"select * from aaaa while time=#"&变量名&"#",在mssql中是不行的,他的语法是“select * from aaaa while time='"&变量名&"'"”。(意思是让你把日期时间变量当成字符串来使用,呵呵~~~)


18、原来ASP里的“Delete * FROM ……”要改为“Delete FROM ……”


19、有可能rs.update失败,修改成update 表名 set 字段=‘值’ 这样通过(遇到的情况,提示为:
Microsoft OLE DB Provider for SQL Server 错误 '80040e38'

乐观并发检查失败。已在此游标之外修改了该行。

/Admin_ClassOrder.asp,行 164 )


20、access里面除法可以使用"\"或者"/",MSSQL里面只能使用"/"



楼主参考一下吧,转的时候注意一下.
liuqinqin 2006-05-20
  • 打赏
  • 举报
回复
请大家给予帮助,谢谢,,,,
liuqinqin 2006-05-20
  • 打赏
  • 举报
回复
迁移的时候,一般会遇到:

第一步:利用ACCESS 工具中的“升迁向导”将ACCESS数据库转入MSSQL数据库
第二步:检查一些特定字段的属性是否正常(如自增字段,是否字段,时间字段,有默认值的字段)
第三步:修改conn.asp文件中的数据库连接字符串(指所有相左关的conn.asp文件)
第四步:修改程序中与 是否字段 及 时间字段 相关的代码,

关于now:
如原先的SQL语句可能是这样:
update table1 set a=now()
现应改成:
update table1 set a=getdate()
因为在MSSQL另表示现在时间的是getdate()而不是如ACCESS中的now()

以上情况的报错可能是:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'

'now' 不是可以识别的 函数名。

例子是:/bigclass.asp,行 810

修改难度:易(替换代码中的now()为getdate()就行)


关于true与false:
比如原先的SQL语句可能这样:
update table1 set b=true
现应改成:
update table1 set b=1
因为MSSQL中表示“真”是1,“否”是0,而不是ACCESS中的 “true”与“false”

以上情况的报错可能是:


例子是:

修改难度:较难(必须得替换SQL语句的true为1,因为可能程序代码也存在true,所以是不能全部替换的)


关于保留字:
MSSQL对保留字的要求对ACCESS的要求更严
在MSSQL的SQL语句是不能这样写的:
所以在MSSQL中最好不要用保留字做字段名,比如一个字段名是name, 这种情况在MSSQL中是不提倡的,这在很多情况下的查询语句是不被支持的,如果实在要用,那么SQL语句中最好这么写[name]


五:其它不该错的错:
admin/newsadd1.asp,行15
SQL语句是这样的:select * from System where name,这是一个明显错误的SQL语句,且不说保留字先,光语法就是错误的,修改为:
select * from System



附conn.asp文件代码:
<%
set conn=server.createobject("ADODB.connection")
conn.open "PROVIDER=SQLOLEDB;DATA SOURCE=127.0.0.1;UID=你的用户名;PWD=密码;DATABASE=升迁后的库名"
%>

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧