Aktualizujemy nasze środowisko testowe o nowy serwer i zaktualizowaną wersję Microsoft SQL Server i napotkaliśmy problem.
Na nowym serwerze nasz stary kod otrzyma „operacja nie jest dozwolona, gdy obiekt jest zamknięty” podczas wykonywania niektórych procedur przechowywanych. Ta wiadomość nigdy nie pojawiła się na starym serwerze. Po wyśledzeniu go problem można rozwiązać, dodając SET NOCOUNT ON;
do procedury składowanej.
Spojrzałem na wartości domyślne w bazie danych i nie zauważyłem innych ustawień (SQL Server 2008 vs. SQL Server 2014) związanych z wartościami domyślnymi.
Na jakie ustawienie powinienem patrzeć, aby rozwiązać ten problem globalnie, bez konieczności dodawania SET NOCOUNT ON
do tysiąca przechowywanych procesów?
sql-server
sql-server-2008
sql-server-2014
sp-configure
UnhandledExcepSean
źródło
źródło
SET NOCOUNT ON;
, zawsze.SET NOCOUNT ON;
na początku procedury przechowywanej (poBEGIN
). Liczba procedur przechowywanych nie powinna tak naprawdę stanowić problemu.BEGIN
- jest fajna, ale nie wymagana.Odpowiedzi:
Konfiguracja programu SQL Server ma odpowiednią opcję o nazwie odpowiednio
user options
, którą można ustawić za pomocąsp_configure
systemowej procedury składowanej. Napisałem post na blogu na temat SQL Server Science, pokazujący, jak sprawdzać i ustawiać opcje użytkownika.W skrócie, możesz uzyskać „wartość konfiguracji” ze starego serwera, używając tego:
Następnie ustaw nowy serwer tak, aby korzystał z tych samych opcji:
(zastąp <wartość konfiguracji> wartością ze starego serwera).
źródło
SET NOCOUNT ON
problem zostanie rozwiązany, ustawienie opcji użytkownika na 512 rozwiąże problem.