繁体   English   中英

将Access SQL查询转换为SqlServer

[英]Converting Access SQL Queries to SqlServer

我已经完成了将访问表,查询,宏和报表的DOZENS转换为SQL Server的任务,到目前为止,它的发展还很糟糕。

例如这样的:

SELECT [Numbers by Quarter and Bedsize].SizeCategory, 
[Numbers by Quarter and Bedsize].Bedsize, 
[Numbers by Quarter and Bedsize].[SumOfNumber of CLABSI], 
[Numbers by Quarter and Bedsize].[SumOfCentral Line Days],
 Round(1000*[Numbers by Quarter and Bedsize].[SumOfNumber of CLABSI]/[Numbers by Quarter and Bedsize].[SumOfCentral Line Days],2) AS [State CLABSI Rate], 
 [Numbers by Quarter and Bedsize].SummaryYQ
FROM [Numbers by Quarter and Bedsize]
ORDER BY [Numbers by Quarter and Bedsize].SizeCategory, [Numbers by Quarter and Bedsize].SummaryYQ;

虽然我以前见过SQL代码(主要是mysql),但从未见过[Numbers by Quarter and Bedsize].SizeCategory

有什么好的教程可以将Access SQL转换为SQLServer? 请注意,我之前从未真正接触过Access或SqlServer。

我从未见过像[Numbers by Quarter and Bedsize] .SizeCategory这样的东西

这是点限定名称的示例。 点左侧的元素是相关名称。 如果您在from子句中未提供显式的关联名称,则假定默认的关联名称等于表名称。 例如

SELECT [Numbers by Quarter and Bedsize].SizeCategory
  FROM [Numbers by Quarter and Bedsize];

...实际上被解析为:

SELECT [Numbers by Quarter and Bedsize].SizeCategory
  FROM [Numbers by Quarter and Bedsize] AS [Numbers by Quarter and Bedsize];

您会看到相关名称称为“别名”,这是不正确的,但可悲的是变成了白话。

可以说,如果选择了简短的相关名称,它可以使代码更易于阅读,例如

SELECT n.SizeCategory
  FROM [Numbers by Quarter and Bedsize] AS n;

表格名称周围的方括号是带引号的标识符。 在Standard SQL中,带引号的标识符是双引号( " )。Access数据库引擎(ACE,Jet,无论如何)均不符合SQL标准,并使用方括号。SQLServer可以使用标准方括号和专有方括号作为引用标识符。

如果数据元素否则是非法的(例如包含空格或非空格字符或以空格开头),则访问需要带引号的标识符。 通过示例构建器进行的Access查询会趋向于在所有数据元素名称周围添加带引号的标识符,无论是否实际需要它们。

由于存在空格,因此表名Numbers by Quarter and Bedsize需要使用引号标识符。 我建议您将端口作为重命名数据元素的机会。 虽然可能需要进行完整的修订(我会质疑所选名称的总体质量),但是有些“低落的果实”将是用下划线替换空格字符的机会。

根据上述建议,并添加一些格式,查询将变为:

SELECT n.SizeCategory, 
       n.Bedsize, 
       n.SumOfNumber_of_CLABSI, 
       n.SumOfCentral_Line_Days,
       Round(1000 * n.SumOfNumber_of_CLABSI / n.SumOfCentral_Line_Days, 2) 
          AS State_CLABSI_Rate, 
       n.SummaryYQ
  FROM Numbers_by_Quarter_and_Bedsize AS n
  ORDER 
     BY SizeCategory, SummaryYQ;

显然,端口将涉及语法更改,但是您还应该查找行为更改。 例如,除非值之一是DECIMAL类型,否则Access SQL中的除法将导致FLOAT ;在这种情况下,结果是DECIMAL ; SQL Server中的行为是不同的。 您将面临的挑战之一是Access的文档非常差,例如,Access帮助或Microsoft的其他任何官方文档中都没有提到我刚才关于部门划分的断言。 我必须通过反复试验自己弄清楚。

我建议您在Access和SQL Server中都编写全面的测试,以确保移植的SQL不会导致更改的行为。

您正在做的事情似乎不需要完全手动完成...

您是否考虑过使用免费的Microsoft SQL Server迁移助手(SSMA)从Access到MS SQL Server 2008进行“升级”?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM