Recentemente, tive meu primeiro gosto do erro " Consultas heterogêneas exigem que as opções ANSI_NULLS e ANSI_WARNINGS sejam definidas para a conexão ". Quase todos os recursos que encontrei neste site e em outros lugares lidavam com isso ocorrendo em um procedimento armazenado.
Meu cenário específico é um aplicativo e banco de dados fornecidos pelo fornecedor, posso alterar o banco de dados, mas não o aplicativo. Eu criei uma visão no banco de dados para outro servidor (através de um servidor vinculado), mas quando tentei usar isso no aplicativo, recebi o erro mencionado acima. Eu usei o SQL Profiler para provar que o aplicativo abre suas conexões com ANSI NULLs e WARNINGS OFF. Eu usei o SSMS para provar que o link funciona com os valores padrão. Mas ao contrário de um SP eu não posso definir ANSI WARNINGS em uma view.
Eu configurei ANSI WARNINGS no banco de dados como um teste, o aplicativo agora funcionou, mas não pude pagar um teste de regressão completo do aplicativo, portanto, esta solução não funciona. Eu também tentei muitas maneiras diferentes de implementar o servidor vinculado, incluindo criar uma conexão ODBC no servidor e usá-la. Mas é como se o aplicativo estivesse definindo explicitamente ANSI WARNINGS para off.
Não tenho certeza se importa, mas o servidor de origem é SQL2000 e o servidor remoto era SQL2008R2.
Como eu disse na pergunta, muitos recursos tratavam dessa questão, mas não quando se tratava de uma visão. A solução que encontrei foi
1- crie um 2º banco de dados no meu servidor de origem.
2- criar uma visão no 2º db usando o servidor vinculado ao BD remoto
3- alterar a visão no 1º BD para usar a visão no 2º BD
4- alterar o 2º BD para usar ANSI WARNINGS ON a nível de BD