Perché è un finale di SET in modo incoerente generazione di un errore in SQL?
-
13-09-2019 - |
Domanda
Sto guardando un errore da una delle nostre applicazioni web, e si chiama una stored procedure che era responsabile per l'aggiornamento di un record nel database.
Questa stored procedure ha lavorato per settimane senza problemi.Poi un giorno ha iniziato a lanciare errori, durante il debug abbiamo trovato la causa per essere all'interno della stored procedure.
Fondamentalmente era una dichiarazione come questa
Begin
// Do Stuff
Set
End
Così il SET
in realtà non è mai impostato nulla.Per qualche ragione, questa funziona perfettamente bene sul nostro server, ed è stato in esecuzione bene su un client server, fino a prima di oggi, quando ha deciso di iniziare a lamentarsi.(Errore di Sintassi)
C'è qualche tipo di SQL Server impostazione che sarebbe la causa di questo improvviso cambiamento nel comportamento?
Chiarimento - Il SET
è sempre stato nelle procedure.E l'esecuzione di un SET
di per sé, o come una dichiarazione unica, in una stored procedure, infatti, il lavoro per me.Questo è il problema non lavoro.Quindi non vi è nulla che possa causare a lavoro quando dovrebbe essere in difetto?
Soluzione
Una procedura con un SET
come che normalmente non riescono a compilare, anche se il SET
non può essere raggiunto:
alter procedure dbo.testproc as
begin
return 1;
set
end
Incorrect syntax near the keyword 'SET'.
Dal momento che l'alter non riesce, non vedo come la procedura potrebbe finire nel database, in primo luogo?
O forse siete stati in esecuzione in modalità di compatibilità per SQL Server 2000 (che comunque ha permesso a questo.) Cambiando la compatibilità mdoe a SQL Server 2005 o superiore sarebbe poi rompere la procedura.
Altri suggerimenti
L'esecuzione di "SET", di per sé, genera un errore.Mi è stato originariamente intenzione di suggerire che si potrebbe avere ramificazione codice (IFs, Restituisce, Goto, etc.) che ha causato la linea di non essere mai raggiunto...ma trovo che non posso creare una stored procedure che contiene questo come uno stand-alone istruzione.
Se si script della procedura e provare a ricreare (con un nome diverso), può essere creato?
Potrebbe essere la pena di distacco dello script, o parte di esso, come il tuo sono confortevoli, rendendo pubbliche.