WEB开发网
开发学院数据库MSSQL Server 用SSMA移植Acceses到SQL几点问题 阅读

用SSMA移植Acceses到SQL几点问题

 2007-12-27 15:31:37 来源:WEB开发网   
核心提示:你可以使用SSMA运行依靠数据库的SQL Server架构,它建立了一种结构来保存数据以便你可以移植数据,用SSMA移植Acceses到SQL几点问题(2),理论上听起来很好,但是实际上是怎样的呢?虽说尝试从任意一个数据库引擎移植到另一个都是麻烦的,如果我们可以手动地做,SSMA就应该可以为我们做这件事,且这个工具可以

你可以使用SSMA运行依靠数据库的SQL Server架构,它建立了一种结构来保存数据以便你可以移植数据。理论上听起来很好,但是实际上是怎样的呢?虽说尝试从任意一个数据库引擎移植到另一个都是麻烦的,且这个工具可以免费的为你做90%的工作,但它还存在一些缺陷。

例如,虽然不是SQL标准的一部分,Access需要所有日期来包装到hash记号中。不幸的是,SSMA看起来没有考虑到这点,这个疏忽的结果就是所有涉及到日期的查询结果都不能成功转换。下面是一个错误信息的例子:

/* * SSMA error messages: * A2SS0058: Following SQL statement is not supported and cannot be converted: * * SELECT

DISTINCTROW EMPLOYEES.EmployeeNo, EMPLOYEES.FirstName, EMPLOYEES.LastName, EMPLOYEES.DateOfBirth, EMPLOYEES.DateEmployed *

FROM EMPLOYEES * WHERE ((EMPLOYEES.DateOfBirth)>#1/1/1970#); * */

PRINT 'ERROR: SSMA failed to convert the previous statement.'

日期在数据库中是很常见的,所以这个疏忽将会影响大多数数据库转换。但要解决并不困难,如下:

SELECT EmployeeNo, FirstName, LastName, DateOfBirth FROM dbo.EMPLOYEES WHERE (DateOfBirth > CONVERT(DATETIME, '1970-01-01'))

从例子中返回正确的数据集。

(我们可以讨论一下是否是这样,例如:CONVERT(DATETIME, '1970-01-01 00:00:00', 102)可能更恰当,但是不管怎么说,我们可以转换数据处理),如果我们可以手动地做,SSMA就应该可以为我们做这件事。

还有更糟糕的问题:Access默认是在文本周围使用双引号,例如:
SELECT EMPLOYEES.EmployeeNo, EMPLOYEES.FirstName FROM EMPLOYEES WHERE ((EMPLOYEES.FirstName="Norma"));

Tags:SSMA 移植 Acceses

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接