我有链接到SQL Server后端的Access表。我将某些MS Access查询转换为SQL Server视图。在SQL Server中的查询(视图)的设计视图中,我可以看到一些联接表具有一对多关系,而某些联接表具有一对一关系。但是,当我在MS Access中打开查询时,每个单个关系都显示一对一关系。
MS Access中也没有数据库图,因为它是链接表。由于这个原因,MS Access查询返回的记录少于SQL Server视图。我希望某些查询保留在MS Access中,但是由于链接表中没有关系,这是否意味着我必须将每个查询都转换为SQL Server视图?
答案 0 :(得分:0)
实际上,前端中相关表的显示确实没有关系。
该图实际上只是为您提供方便。它显示的内容并不一定反映您在sql服务器上的关系。
过去,当您在Access中建立查询时,该关系图永远不会对返回的行数产生任何影响。
使用Access查询构建器时,您可以在所需的任何表之间建立并选择ANY关系,甚至是没有意义的表。
前端不能在SQLServer上强制执行任何类型的关系,因为如果前端可以,那么5个不同的前端(每个定义了不同的关系)会发生什么?
因此,SQLServer会忽略您在Access中看到的关系。实际上,在使用Access后端时,此ALSO也适用。您总是在数据库端而不是前端定义关系。
关于已定义关系的唯一真正好处是,某些表单向导可以使用该图来帮助您。并且,如果您启动Access查询构建器并放入一些表,则这些表将根据关系窗口为您绘制(设置)联接。但是,即使那样,您仍可以删除联接行,并以任何需要的方式连接表-包括废话联接。
因此,当您使用网站连接到amazon.com时,您的网络浏览器或“客户端”计算机无法将强制关系指定给服务器-Access Client或vb.net或FoxPro也不可以向服务器指示强制关系。连接到SQL Server。您只能在服务器端定义关系-客户端根本无法做任何事情来更改您在sql服务器端设置的规则。
将Access表链接到SQLServer时,将不会在关系窗口中看到该关系。
当然,在查询构建器中,您会看到关系,但它们不是强制关系。您可以并且始终在查询构建器中构建所需的任何类型的联接。设置此类查询的方式与“关系”窗口中的强制关系零相关。
因此,您可以使用Access中的查询构建器在所需表之间选择任何联接,包括根本没有意义的联接。
如果您已将数据迁移到SQLServer,则您现有的非接触式查询(访问端)应继续返回相同的结果。
以及您在SQLServer上拥有的图(以及定义的关系不要归结到客户端图)。
如果在SQLServer上构建视图,则必须密切注意如何构建该视图,尤其是左与“正常”或所谓的内部联接。
我已经将Access数据库迁移到sql服务器超过15年了,并且迁移后我从未有过Access查询返回不同的结果。测试Access查询,它应返回与以前相同的结果。
当然,现在如果将查询转换为视图,则所有选择都将关闭,因为您现在使用不同的方言和sql版本重新编写查询-在这种情况下需要密切注意。但是,即使将查询移至SQLServer之后,也很难获得不同的结果。
因此,即使没有sql server,关系图窗口也与您在查询构建器中构建查询的方式无关。您设置的关系不会改变查询的工作方式。强制关系将阻止您说不将发票添加到发票表而无需设置记录所属的“客户”(在客户表中)。但是,查询构建器不会阻止您编写错误的sql(包括SQLServer)或Access查询构建器,它们不会受到强制关系的影响。
您可以在两侧(SQL或Access)编写错误的sql。通过“坏” sql,它将是不能反映您在表之间建立和假定的关系的sql。