时间:2011-01-06 18:54:57

标签: sql-server ms-access

2 个答案:

答案 0 :(得分:24)

在动态传递查询的开头添加以下内容:

SET NoCount ON

您将能够使用MS Access中的查询。

为什么这样做,我将不得不让其他人解释,但我知道它确实有效。

答案 1 :(得分:11)

这种解释不正确:

  

Access抱怨的声明实际上是你的   SELECT @sql =,看起来像是一个select语句但却没有   返回记录集。当你说SET NOCOUNT ON时,这会关闭   返回导致Access失败查询的记录属性。

......因为那不是发生的事情。

更详细的解释是SQL Server可以从查询或存储过程调用返回多个结果集。这些结果集不是所有记录集,可以是标量值和行集的混合。 当Set NoCount为OFF时,SQL Server依次返回行集,然后返回BOTH到调用代码的记录数。由于VBA没有寻找标量和记录集返回值的这种复杂混合,因此会产生原始错误(因为标量值实际上是在结果集的TOP处返回的,即FIRST)。

当在SQL Server上执行Set NoCount ON时,这告诉SQL Server不要将计数作为结果集的一部分返回。这导致Access / VBA / DAO能够将结果集识别为记录集(即使它实际上是一个多记录集),然后一切都按预期工作。