从SQL Server移植到Access MDB数据库的一点总结

Date: 05.12.2006

Version: 1

By Alva Chien

这段时间一直忙着把我自己的一个项目从SQL Server平台上移植到Microsoft Jet SQL上,所谓Microsoft Jet SQL对我而言其实就是使用MDB文件(基于Microsoft Access 2003,文件格式: Office 2000/2003)了。不知道Microsoft出于什么目的,MSDN上查不到关于Jet SQL的一些细节,除了几篇’Intermediate Jet SQL’, ‘Advance Jet SQL’等文章;后来打开Access的帮助,也是狂简单,而且很老式的Windows帮助格式,查阅非常不便;偶尔一次上Office网站,才查到完整的Jet SQL的语法介绍,虽然简单,但是也可以用了。

 

虽然是个轻量级的数据库,但是Access还是支持了Stored Procedure(Access中成为查询),十分方便,而且关键字大致上兼容了Microsoft T-SQL的格式和ANSI SQL的格式,所以直接把以前的SQL ServerStored Procedure直接复制过来执行一下就OK了,幸亏当初创建的时候没有过多的使用T-SQL的附加内容。

 

以下我是目前遇到的一些问题和解决方法:

 

遇到的第一个问题是,内置函数,Create TableCreate Procedure的时候,总是喜欢为Table中间的FieldProcedure中间的Parameter设置一些Default的值,然而AccessJet SQLSQL Server这方面差别不小,比如DateTime,获取当天时间,Jet SQL使用Now(),而T-SQL使用GetDate(),但是到现在我都没搞明白Uniqueidentifier (T-SQL的标志,Access的标准关键字是GUID)T-SQL提供了一个newid()Jet SQL方面我还没找到,只能把这个DefaultConstant删除。

 

遇到的第二个问题是,Create Procedure的参数格式不同,T-SQL强大的多和方便的多,而Jet SQL必须使用括号来包含所有参数,当然也可以使用Parameter语句。最重要的是,Jet SQLProcedure只能使用一个Insert/Select/Update/Delete方法,也就是是说,只能包含一个SQLDML语句。这个限制是始料不及的,不得不把以前的T-SQL包含了多个语句的Stored Procedure拆开来。

 

遇到的第三个问题是,到目前为止,我还没有找到办法通过Procedure的参数传入一个MEMO (Jet SQL)/nvarchar(max)(T-SQL),就是不限制大小的动态文本。有这样一个非常简单的例子(为了两个平台都能用,去除了Default定义)

CREATE TABLE T_TESTTABLE ([ITEM_DATE] DateTime PRIMARY KEY NOT NULL, [VERSION] UNIQUEIDENTIFIER NOT NULL, [CONTENT] TEXT NOT NULL)

创建一个Procedure来更新这个Table:

CREATE PROC PROC_TESTTABLE_UPDATE (@itemdate DateTime, @ver UNIQUEIDENTIFIER, @cont TEXT) AS UPDATE T_TESTTABLE SET [VERSION]=@ver, [CONTENT]=@cont WHERE [ITEM_DATE]=@itemdate

问题就在于,这个Procedure无论怎么调用都出现:”无法更新CONTENT;字段不可更新。如果不使用这个Procedure,而直接使用SQL语句:

UPDATE T_TESTTABLE SET [VERSION]=’ 83F 04604-B392 -44A 5-9650-B45B055FCF1E’, [CONTENT]=’TEST STRING, WHO CARE IT?’ WHERE [ITEM_DATE]=’ 2006-12-04 ’

三个变量的内容当然随便了,都会成功。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值