在SQL CE中使用现有的MS Access查询

时间:2014-09-13 18:18:41

标签: sql ms-access-2007

我是SQL CE的新手,所以我可能会犯一个基本的错误。要重新创建我想要的sql,我已经在MS Access中创建了重复的表并在那里创建了sql。它在Access中生成我想要的内容并给出错误:

  

解析查询时出错。 [令牌行号= 1,令牌行偏移= 11,令牌错误=总和]"在sql analyzer中。

sql是::

TRANSFORM Sum(ToBank.Bank) AS SumOfBank
SELECT ToBank.Agent, Sum(ToBank.Bank) AS [Total Of Bank]
FROM ToBank
GROUP BY ToBank.Agent
PIVOT Format([DateSold],"yyyy");

感激不尽的任何帮助。我试图在查询中生成一个计算字段,以便在网站上查看它,另一种产生计算的方法也同样受欢迎

1 个答案:

答案 0 :(得分:1)

Microsoft Access使用Access SQL,SQL Server Compact Edition(SQL CE)使用Transact-SQL(T-SQL)。它们是SQL语言的两种完全不同的方言。正如您所发现的那样,在尝试在Access中构建SQL查询然后直接在SQL Server中使用它们时,您将获得相当有限的成功。

两种方言显着不同的一个区域是PIVOT查询(Access称之为“交叉表查询”)。 T-SQL不使用TRANSFORM关键字,因此SQL CE会阻塞Access SQL交叉表查询并不奇怪。

要了解如何将Access交叉表查询转换为T-SQL PIVOT查询,请查看搜索here中的先前问题和答案。

但是,请记住以下内容:

Access中的交叉表查询可以自动处理PIVOT列中的任意值,而T-SQL要求在SQL语句中显式指定PIVOT值。处理可在T-SQL中从一次调用更改为下一次调用的PIVOT值通常涉及动态SQL - “动态”构建SQL语句的T-SQL代码 - 通常通过放置来完成存储过程中的T-SQL代码。不幸的是,SQL CE不支持存储过程。

因此,您可能会发现自己倾向于使用SQL Server Express Edition。至少,您在SQL Express中构建的任何(T-)SQL查询都有更好的机会在SQL CE中运行未修改。如果您决定使用而不是 SQL CE,您还可以使用存储过程(以及动态SQL)。或者,如果您想坚持使用SQL CE,那么您的应用程序必须在运行时确定PIVOT值,构建T-SQL查询,然后将其提交给SQL CE。