Estamos atualizando nosso ambiente de teste com um novo servidor e uma versão atualizada do Microsoft SQL Server e encontramos um problema.
No novo servidor, nosso código antigo receberá "operação não permitida quando o objeto é fechado" ao executar alguns procedimentos armazenados. Esta mensagem nunca apareceu no servidor antigo. Quando o rastreamos, o problema pode ser resolvido adicionando- SET NOCOUNT ON;
se ao procedimento armazenado.
Analisei os padrões no banco de dados e não vi configurações diferentes (SQL Server 2008 vs SQL Server 2014) relacionadas a padrões.
Que configuração devo procurar para resolver isso globalmente sem a necessidade de adicionar SET NOCOUNT ON
a mil procs armazenados?
sql-server
sql-server-2008
sql-server-2014
sp-configure
UnhandledExcepSean
fonte
fonte
SET NOCOUNT ON;
, sempre.SET NOCOUNT ON;
no início do procedimento armazenado (depoisBEGIN
). O número de procedimentos armazenados não deve ser realmente um problema.BEGIN
- é legal, mas não obrigatório.Respostas:
A Configuração do SQL Server tem uma opção chamada, apropriadamente
user options
, que pode ser definida usando osp_configure
procedimento armazenado do sistema. Eu escrevi uma postagem no blog do SQL Server Science mostrando como inspecionar e definir as opções do usuário.Em resumo, você pode obter o "valor da configuração" do servidor antigo, usando o seguinte:
Em seguida, defina o novo servidor para usar as mesmas opções através deste:
(substitua o <valor da configuração> pelo valor do servidor antigo).
fonte
SET NOCOUNT ON
resolver o problema, definir as opções do usuário para 512 o corrigirá.