2017-11-23 1 views
2

우리는 다음과 같은 SQL 서버 저장 프로 시저가 : 때때로중첩 레벨 제한 오류 2014

ALTER PROCEDURE [dbo].[up_get_id] 
    (@KeyName VARCHAR(30), @ID INTEGER OUTPUT) 
AS 
BEGIN 
    DECLARE @SEQ_NAME VARCHAR(120); 
    SET @SEQ_NAME = 'seq_dbk_' + @KeyName; 

    DECLARE @SQL NVARCHAR(1000); 
    SET @SQL = 'set @ID = next value for ' + @SEQ_NAME; 

    EXEC sp_executesql @SQL, N'@ID int out', @ID = @ID output; 

    RETURN 0; 
END 
GO 

를 (항상, 아마 높은 하중 하에서) 저장 프로 시저 호출 한 후 :

declare @P1 int 
exec up_get_id @KeyName = 'KEY', @ID = @P1 output 
select @P1 Result 

을 클라이언트에 오류가 발생했습니다.

Warning: Fatal error 217 occurred at Nov 21 20117 12:54PM. Note the error and time, and contact your system administrator.

또한 SQL Server 로그에 다음 메시지가 나타납니다.

Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 2).

어떤 아이디어가 잘못 되었나요?

Server 버전 :

Microsoft SQL Server 2014 - 12.0.4213.0 (X64) 
Jun 9 2015 12:06:16 
Copyright (c) Microsoft Corporation 
Enterprise Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600:) (Hypervisor) 
+0

정확하게 "제한 2"라고 쓰여 있습니까? 숫자와 객체로 전체 SQL 오류 표시 –

+0

예, 정확하게 "제한 2", 오타가 아닙니다. 사실, 두 가지 오류 메시지가 있습니다. 첫 번째 (클라이언트가 가져 오기) : "경고 : 치명적인 오류 217이 발생했습니다 ..."및 SQL Server 로그에만 나타나는 두 번째 : "오류 : 217, 심각도 : 39, 상태 : 16. 최대 저장 프로 시저, 함수, 트리거 또는 뷰 중첩 수준이 초과되었습니다 (제한 2). " –

+0

"심각도 : 39"는 sql에서 발생하지 않습니다. SQL 로그 –

답변

0

Аnd 답이없는 응답 :

COMPATIBILITY_LEVEL 100 덜 오류가

Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 2).

(110)보다

NEXT VALUE FOR function cannot be used if ROWCOUNT option has been set, or the query contains TOP or OFFSET.

그래서 당신이 설정 한 경우 ROWCOUNT <> 0