我最近第一次体验到错误“异构查询需要为连接设置 ANSI_NULLS 和 ANSI_WARNINGS 选项。 ”我没有遇到过。我在这个站点和其他地方找到的几乎所有资源都在存储过程中处理这种情况。
我的具体情况是供应商提供的应用程序和数据库,我可以更改数据库但不能更改应用程序。我在数据库上创建了一个到另一台服务器的视图(通过链接服务器),但是当我尝试在应用程序中使用它时,出现了上述错误。我使用 SQL Profiler 来证明该应用程序打开其与 ANSI NULL 和 WARNINGS OFF 的连接。我使用 SSMS 来证明该链接适用于那里的默认值。但与 SP 不同的是,我无法在视图上设置 ANSI WARNINGS。
我在数据库上设置了 ANSI WARNINGS 作为测试,该应用程序现在可以运行,但我无法负担该应用程序的完整回归测试,因此该解决方案不起作用。我还尝试了许多不同的方式来实现链接服务器,包括在服务器上创建一个 ODBC 连接然后使用它。但这就像应用程序明确将 ANSI WARNINGS 设置为关闭。
不确定是否重要,但源服务器是 SQL2000,远程服务器是 SQL2008R2。
正如我在问题中所说,很多资源都处理了这个问题,但当它与视图有关时却没有。我找到的解决方案是
1- 在我的源服务器上创建第二个数据库。
2- 使用链接服务器到远程数据库在第二个数据库上创建一个视图
3- 更改第一个数据库上的视图以使用第二个数据库上的视图
4- 更改第二个数据库以在数据库级别使用 ANSI WARNINGS ON