Nous mettons à niveau notre environnement de test avec un nouveau serveur et une version mise à jour de Microsoft SQL Server et avons rencontré un problème.
Sur le nouveau serveur, notre ancien code obtiendra "l'opération n'est pas autorisée lorsque l'objet est fermé" lors de l'exécution de certaines procédures stockées. Ce message n'est jamais apparu sur l'ancien serveur. Lorsque nous l'avons retrouvé, le problème peut être résolu en ajoutant SET NOCOUNT ON;
à la procédure stockée.
J'ai regardé les valeurs par défaut de la base de données et je n'ai vu aucun paramètre différent (SQL Server 2008 vs SQL Server 2014) lié aux valeurs par défaut.
Quel paramètre dois-je envisager pour résoudre ce problème à l'échelle mondiale sans avoir à ajouter SET NOCOUNT ON
à un millier de procs stockés?
la source
SET NOCOUNT ON;
, toujours.SET NOCOUNT ON;
au début de la procédure stockée (aprèsBEGIN
). Le nombre de procédures stockées ne devrait pas vraiment être un problème.BEGIN
- c'est bien, mais pas obligatoire.Réponses:
La configuration de SQL Server possède une option appelée, de manière appropriée
user options
, qui peut être définie à l'aide de lasp_configure
procédure stockée système. J'ai écrit un article de blog sur SQL Server Science montrant comment inspecter et définir les options utilisateur.En bref, vous pouvez obtenir la "valeur de configuration" de l'ancien serveur, en utilisant ceci:
Ensuite, configurez le nouveau serveur pour utiliser les mêmes options via ceci:
(remplacez la <valeur de configuration> par la valeur de l'ancien serveur).
la source
SET NOCOUNT ON
le problème est résolu, la définition des options utilisateur sur 512 le résoudra.