在Excel 2016中,我们使用“获取外部数据”->“来自其他来源”->“来自Microsoft Query”来访问SQL Server视图中的数据。我可以很好地连接到数据源,并设置一个过滤器以按“ term”列进行过滤。当我过滤20191的期限时,我收到一条错误消息,提示“ TDS流中的协议错误”。但是,当我为where子句选择20181或任何以前的术语时,不会出现错误。
运行SQL事件探查器以捕获查询运行时,可以看到查询以正确的行数成功运行。
因为这是通过视图访问的,所以我决定测试将where子句移到视图中而不是在excel中,并且只要在where1子句中使用了20191,它都会给出相同的错误,除非我在where子句中包含其他项进一步过滤掉像“ 0%”这样的“ student_id”
视图中的另一个项目。它连接到一个安全表,该表将过滤返回的记录,这些记录仅返回到运行该视图的用户有权访问的记录。安全过滤器仅包含student_id和user_id。基础表在student_id上联接,然后视图检查suser_sname()= user_id。如果我删除了此安全检查,或者对登录进行了硬编码而不是使用suser_sname()函数,则查询将不再给我任何错误。
关于我应该寻找这个错误的任何想法。它将是excel,SQL Server,网络等。到目前为止,可以在我能够对其进行测试的任何客户端计算机上进行复制。