2012-03-19 188 views
3

我在过去4个月中在C#VS 2010中开发应用程序。我用MS Access 2007成功存储了近20个表。MS Access 2007查询不会在SQL Server 2008上运行

今天我意识到我的数据库不能一致地由MS Access 2007处理。因此我决定使用升迁向导来升级SQL Server 2008 R2 Express,它的工作非常棒!

但是,当我试图运行我已经很好开发的应用程序的各种选项时,每次向SQL Server发出查询时都会一直抛出错误。

我明白了许多SQL的支持Access的东西都没有通过MS SQL Server的

支持例如:与日期查询,用于表示日期的格式,当我们使用“#”时,SQL Server2008韩元不认识它。

此外,对于布尔值,MS访问存储为真与假在那里与SQL Server使用0

这些所有的查询工作完美与Access 07

我相信一定是有方法以便SQL Server可以理解MS访问查询。或者我将不得不编辑我的整个应用程序?它会和挖矿一样好赚钱..

我改变了所有的数据访问对象,如阅读器,适配器,命令,连接到SQL数据对象使用System.Data.SqlClient

所以,这不是问题。

请尽快帮助我。

谢谢。

+6

SQL Server使用Transact SQL(T-SQL)作为它的语言 - 与MS Access类似,但仍然不同于MS Access SQL。有**没办法,**我知道*使SQL Server运行MS Access SQL * - 您将需要适应和更改您的SQL代码。 – 2012-03-19 16:16:58

回答

5

您不能强制SQL Server运行MS Access查询。这些查询需要重写为使用T-SQL,而不是MS Access使用的查询语言。

我觉得你的痛苦,我只需要重写一个大型的MS Access应用程序(超过1k查询),需要重新创建在SQL Server中使用。

将会有一些查询可能能够直接移植,但是当您注意到使用日期进行查询时,甚至某些聚集函数(First()等)不会在SQL Server中使用,并且这些查询将会需要改变。

这里是将访问SQL一些信息的链接

Converting Access Queries to SQL Server

+0

谢谢你的回答。看着你面对的痛苦,我也有勇气重写我的疑问! – 2012-07-11 07:28:48

2

你是正确的,大多数时候,你不能只是采取从Access查询的SQL和内运行SQL Server。它可能适用于非常简单的查询,但通常您需要调整它们。

有几个步骤,我想借此:

  1. 提取你的查询(这我相信在你的代码),并在Access数据库中重新创建它们。确保它们在那里工作,正常的访问查询。
    (例如,您可以简单地将一些代码添加到您的应用程序中,以将所有查询打印到文件中,以便您不必混淆参数,然后将它们复制/粘贴到Access数据库中)。
    重点在于在Access中有工作查询。使用SSMA from Microsoft帮助您将查询移动到SQL Server。它将它们翻译成T-SQL做得很好。
    你可能仍然需要手工转换一些麻烦的查询,但它不应该是那么多,通常转换并不困难。

  2. 一旦转换为T-SQL,只需将这些工作查询重新注入到代码中,或将复杂查询保留在SQL Server中作为视图(这通常会更快,因为SQL Server已经创建了它的执行计划,而不是您的应用程序发送服务器需要分析的原始SQL)。

  3. 正如您所指出的那样,如果您的字段使用某些不能正确跨越到SQL Server的功能,可能会出现一些问题。
    看看在访问你的表,并试图在转换前做一些清理:

    • 对于布尔字段:
      确保您设置的默认值设置为0或1(他们不应该为空)。
    • 必填字段必须为非空值:
      确保您已设置为“必需”的任何字段在其数据中不包含任何空值。
    • 唯一索引不能忽略空值:
      检查您的索引未设置为“唯一”和“忽略空值”。
    • 所有表必须具有干净的主键:
      确保您的所有表都有一个唯一的主键,其数据中没有空值。