Tenho dois scripts T-SQL programados para serem executados uma vez por dia. Ambos fazem a limpeza de alguns dados antigos de tabelas diferentes. Ambos os scripts são executados como o mesmo usuário, no mesmo banco de dados.
O script A será executado com êxito no SQL Server Management Studio e quando iniciado como um trabalho, mas o Script B será executado com êxito apenas no SQL Server Management Studio, mesmo quando conectado como o mesmo usuário configurado para executar o script no SQL Server Agente.
O script B falha com o seguinte erro:
Executado como usuário [nome de usuário].
DELETE falhou porque as seguintes opções SET têm configurações incorretas: 'QUOTED_IDENTIFIER'.Verifique se as opções SET estão corretas para uso com exibições indexadas e/ou índices em colunas computadas e/ou índices filtrados e/ou notificações de consulta e/ou métodos de tipo de dados XML e/ou operações de índice espacial.
[SQLSTATE 42000] (Erro 1934). A etapa falhou.
Eu tenho um índice filtrado em uma das tabelas que estou tentando limpar, mas por que ele funciona por meio do SSMS?
O padrão para
QUOTED_IDENTIFIER
SSMS éON
enquanto éOFF
para SQLCMD, OSQL, BCP e, no seu caso, especialmente SQL Server Agent.Para referência, estas são as diferentes opções padrão por aplicativo
A tabela acima é copiada de Erland Sommarskog
Portanto, você precisaria adicionar
SET QUOTED_IDENTIFIER ON
como a primeira linha em sua etapa de trabalho.