Access 导入SQL 注意事项

1,对于日期字段字段

  access表示为:#1981-28-12#

  SQLSERVER2000表示为:''1981-02-12''

  2,SQL语句区别,select ,update 在对单表操作时都差不多,

  但多表操作时update语句的区别ACCESS与SQLSERVER中的UPDATE语句对比:

  SQLSERVER中更新多表的UPDATE语句:

  UPDATE Tab1

  SET a.Name = b.Name

  FROM Tab1 a,Tab2 b

  WHERE a.ID = b.ID;

  同样功能的SQL语句在ACCESS中应该是

  UPDATE Tab1 a,Tab2 b

  SET a.Name = b.Name

  WHERE a.ID = b.ID;

  即:ACCESS中的UPDATE语句没有FROM子句,所有引用的表都列在UPDATE关键字后.

  更新单表时:都为:

  UPDATE table1 set ab='12',cd=444 where ....

  3,delete语句

  access中删除时用:delete * from table1 where a>2 即只要把select 语句里的select 换成delete就可以了。

  sqlserve 中则为: delete from table1 where a>2 即没有*号

  4,as 后面的计算字段区别

  access中可以这样:select a,sum(num) as kc_num,kc_num*num as all_kc_num 即可以把AS后的字段当作一个数据库字段参与计算。

  sqlserver 中则为:select a,sum(num) as kc_num,sum(num)*num as all_kc_num 即不可以把AS后的字段当作一个数据库字段参与计算。

  5,[.]与[!]的区别

  access中多表联合查询时:select tab1!a as tab1a,tab2!b tab2b from tab1,tab2 ,中间的AS可以不要。

  sqlserve 中则:select tab1.a as tab1a,tab2.b tab2b from tab1,tab2 ,中间的AS可以不要。

  6,联合查询时,

  access中多表联合查询:'select a,b from(

  select a,b from tab1 where a>3 union select c,d from tab2 ) group by a,b

  sqlserve 中则'select a,b from(

  select a,b from tab1 where a>3 union select c,d from tab2 ) tmptable group by a,b即要加一个虚的表tmptable,表名任意。---

  7,access升级到sqlserver时,

  可以用sqlserver的数据导入工具导入数据,但要做必要的处理。

  access中的自动编号,不会自动转换SQL中的自动编号,只能转换为int型,要把它手工改成标识字段,种子为1,把所有导入被sqlserver转化成的以n开头的字段类型的n去掉,如nvarchar->varchar.把需要有秒类型的日期字段改成datatime类型(SQL会把所有的日期开转化成smalldatetime型)

  8,true与1=1

  access用where true表示条件为真,

  sqlserver用where 1=1表示条件为真

  9,判断字段值为空的区别

  普通空:

  Access和sql server一样 where code is null 或 where code is nol null

  条件空:

  Access:iif([num] is null,0,[num]) 或 iif([num] is null,[num1],[num])

  SQLServer: isnull([num],0) 或 isnull([num],[num1])

  10,SQL语句取子串的区别

  access:MID(字段,n1,[n2]),LEFT(字段,n),RIGHT(字段,n)

  如:select left(cs1,4)+'-'+cs2 as cs3

  SQLServer: SUBSTRING(expression, start, length)

  如:select substring(cs1, 1, 2) + substring(cs1, 4, 2) + '-' + cs2 as cs3

  附:如何发布基于ADO+SQL SERVER的应用

  很多朋友在问如何发布基于ADO+SQL SERVER的应用程序,笔者作了测试,如下:

  Win98访问xp或2K的SQL SERVER 2000服务器,不用任何SQL的DLL文件,只要保证98能与其它工作组里的机子正常通信(能访问另外一台机子里的共享文件),这一步是保证98安装了这三个协议,TCP/IP,SPX/IPX,NETBEUIDG三个协议,

  我的测试环境是,98se+xp,98se只安装了必要的驱动程序,其它的程序一个也没有装(专门装来测试这个的)

------------------------------------------------------------------------------------------------------------------------------
表名不能是User
字段名不能是PassWord


----------------------------------------------------------------------------------------------------------
将使用Access的论坛迁移到SqLServer中 



利用动网提供的论坛程序创建了一个内部论坛。原来,这个论坛是发布在windows2000的IIS5上的。他的数据库用的是Access。可是,当我将这个论坛迁移到windows2003上以后,发现经常死掉。到网上找了一下,并且咨询了微软的工程师,很多人都认为i这跟他使用Access有关。并且,我想在公司内部网站首页增加一个跑马灯来显示论坛中的新帖子,可是,如果继续用Access的话,访问起来不是那么方便。于是决定迁移到SQl中。

第一步:将数据导入SQL Server
进到SQL Server企业管理器,新建一个数据库,然后,选择导入数据,选择Access数据库作为导入源,导入所有的数据。
第二步:修改数据表
通过这种方式建立的数据表,是没有主键和默认值的,参照原来的Access库修改各个表。(这个比较烦,但是一定得做,因为后面的程序中会用到这些默认值)
第三步:修改程序

将站点迁移到相应的服务器,创建新的站点。首先,要改的就是数据库联接.由于Access中的一些函数和SqL中的一些函数不一样,所以,程序会报错,根据程序的报错信息修改相关的地方。这里主要要修改两个地方:

SqL语句中的Now()函数:
在Access中使用Now()函数来获取当前时间,而在SQL Server中用Getdate()函数来获取当前时间。但是,由于原来的程序是采用vb Script写的,VbScript中也采用Now()函数获取当前时间,所以要小心Sql语句中的Datediff函数的第一个参数:

在Access中DateDiff的第一个参数用引号,并且只用一个字母来表示比较的部分,而在SqLServer中不需要引号,并且用全称和或者简称来表示,并且简称也是两个字母的。

改完后逐项测试,改正所有的错误(都挺简单的)。

程序就可以正常使用了,前后时间可能花了4个多小时吧。

我想到以下几点:
1、如果,我们要使用Access数据库,为了以后迁移方便,我们应该尽量避免使用数据库的函数,而是多用程序语言的函数,在SQL语句的外面解决计算问题。如果,不能避免要使用这些数据库函数,我们也应该在代码中设置明显的注释标记,以便于以后迁移。
2、我们在设计程序时候,要充分考虑数据库的迁移的需要,在插入语句、查询语句等语句的时候要尽量采用标准的SqL语法,并且要不厌其烦得插入默认值,而不要依赖数据库提供默认值,这样做,对以后的改进可能会有好处。



ACCESS改为SQL需要注意哪几个地方 



看到别人有时问这个方面的问题。。于是在各网站总结前前辈高人的几点想法,拿来共享:

数据库导入以后,自动增加字段需要重写,所有的数字类型需要增加长度,最好用decimal。

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

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

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

有可能一些true/false类型不能使用,要变为1/0。

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

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

isnull(rowname)要改成rowname = null

ACCESS的数据库中的自动编号类型在转化时,sql server并没有将它设为自动编号型,我们需在SQL创建语句中加上identity,表示自动编号!

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

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

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

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

=====================

Access中的Join查询:要求字段不能是Memo类型或OLE类型,否则报以下错误:

=====================

Access 导入SQL 注意事项 - 似水无痕 - 用友软件

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DBF文件是一种常见的数据库文件格式,它经常用于存储表格数据。将DBF文件导入SQL Server数据库可以通过以下步骤完成: 1. 在SQL Server Management Studio中创建一个新的数据库,或选择要导入DBF数据的现有数据库。 2. 在SQL Server Management Studio中打开“任务”菜单,并选择“导入数据”。 3. 在“导入和导出向导”对话框中,选择要导入数据的源。在这里选择“Microsoft Access(Microsoft Jet Database Engine)”。 4. 点击“浏览”按钮,选择要导入的DBF文件。 5. 在“源”页中,提供DBF文件的正确连接字符串信息。可以使用默认的提供程序选项。 6. 在“目标”页中,选择将数据导入的目标数据库和表。 7. 在“源和目标关系”页中,可以选择设置字段映射和数据转换规则,以确保导入数据符合目标数据库的要求。 8. 在“完成”页中,查看导入操作的摘要,并根据需要选择保存导入操作的设置。 9. 单击“完成”按钮,开始将DBF数据导入SQL Server数据库。 在导入过程中,可以根据需要进行进一步的设置和修改。导入完成后,可以在SQL Server数据库中使用所导入数据进行查询和分析。 需要注意的是,导入DBF文件到SQL Server数据库时,应确保DBF文件的结构与目标数据库的表结构相匹配,以确保数据的正确性和完整性。另外,也可以使用其他工具或编程语言来完成DBF文件到SQL Server的导入过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值