Por que é um arrasto SET inconsistente jogando um erro no SQL?
-
13-09-2019 - |
Pergunta
Eu estou olhando para um erro de uma das nossas aplicações web, e foi chamando um procedimento armazenado que foi responsável por atualizar um registro no banco de dados.
Este procedimento armazenado trabalhou durante semanas, sem problemas. Então um dia ele começou a jogar erros, durante a depuração encontramos a causa de estar dentro do procedimento armazenado.
É basicamente tinha uma declaração como esta ??p>
Begin
// Do Stuff
Set
End
Assim, o SET
nunca realmente definir qualquer coisa. Por alguma razão isto corre em perfeitamente bem no nosso servidor, e estava funcionando muito bem no servidor cliente até hoje cedo, quando decidiu começar a reclamar. (Erro de sintaxe incorreta)
Existe algum tipo de configuração de SQL Server que faria com que esta súbita mudança de comportamento?
Clarificação - O SET
sempre esteve nos procedimentos. E executando um SET
por si só, ou como uma única declaração em um procedimento armazenado faz de fato funcionam para mim. Este é o problema, ele não deve trabalho. Então, há algo que faria com que ele trabalho quando deveria estar falhando?
Solução
Um procedimento com um SET
como que normalmente não compilar, mesmo se o SET
não pode ser alcançado:
alter procedure dbo.testproc as
begin
return 1;
set
end
Incorrect syntax near the keyword 'SET'.
Uma vez que o alter falhar, eu não posso ver como o procedimento poderia acabar em seu banco de dados em primeiro lugar?
Ou talvez você estava executando em modo de compatibilidade SQL Server 2000 (que ainda permitiu isso.) Alterar o MDOE compatibilidade para SQL Server 2005 ou superior, então, quebrar o procedimento.
Outras dicas
Executar "SET", por si só, irá gerar um erro. I foi originalmente indo para sugerir que você pode ter ramificações de código (IFs, devoluções, GOTOs, etc.) que causaram ser alcançado a linha de nunca ... mas eu acho que eu não posso criar um procedimento armazenado que contém esse como um stand- sozinho comunicado.
Se você roteiro o procedimento e tentar recriá-lo (com um nome diferente), ele pode ser criado?
Talvez valesse a pena postagem esse script, ou como muito do que como o seu são confortáveis ??tomada pública.