这里有点奇怪,但我们有几个SQL Server视图,它们是在Access 2010中打开的Access 2003(mdb)数据库中的ODBC表,但我可以确认Access 2010中存在同样的问题(accdb) )数据库。 SQL Server版本是2012.与SQL Server的连接是通过系统ODBC链接。
在SQL Server上的ViewA和ViewB定义中,我们有[Date_Last_Sunday],[Date_Next_Monday],[Date_Next_Sunday],[Date_2_Mondays_Future]和其他一些。两个视图都具有完全相同的日期列,但左侧有不同的列。在SSMS中,两个查询都返回完全相同的日期列而没有问题。我还可以确认其中任何一个都没有重复的列名。
当我将ViewA链接到Access并将其打开以检查所有内容时,我看到:
当我将ViewB链接到Access并执行相同的检查时,我看到:
注意如何丢失[Date_Next_Monday]列,但数据仍然存在,但是列错了!我不能提出比某种Jet bug更好的解释,但它非常奇怪。这已经工作了多年,今天刚刚被报道为一个问题。
有没有人见过这样的事情?你能解决它吗?
答案 0 :(得分:1)
很抱歉打扰每个人,我觉得有点愚蠢现在我明白了!
问题源于这样一个事实,即第三个视图返回了ViewA和ViewB使用的日期(称之为ViewDates)。在这两个视图中,我与ViewDates进行了交叉连接,并在SELECT
列表中添加了ViewDates.*
。 ViewDates必须在ViewB创建后进行修改。
我在运行SELECT * FROM ViewB
之后进行了更多测试并观察了SSMS中SQL Server上的奇怪行为,但是当我编写ViewB脚本并选择查询来运行它时,结果具有正确的数据。在我发布之前,我最初编写了脚本并运行它,这让我觉得问题出在Access实际上与SQL Server有关。
最终解决此问题所需要的只是编写ViewB脚本并执行(重新编译)。
我仍然觉得奇怪的是,尽管列没有被识别,但数据会持续存在!我想这就是当您在视图顶部的视图上构建视图时会发生什么......
我想我必须记住,这些是我写过的第一个观点,所以我可以原谅自己违反了自那时以来我学到的所有优秀设计实践。