RAISERROR()의 구문 의미는 무엇입니까?
다음과 같은 구문을 가진 Reason After Trigger를 방금 만들었습니다.
Create trigger tgrInsteadTrigger on copytableto
Instead of Insert as
Declare @store_name varchar(30);
declare @sales int;
declare @date datetime;
select @store_name = i.store_name from inserted i
select @sales = i.sales from inserted i
select @date = i.Date from inserted i
begin
if (@sales > 1000)
begin
RAISERROR('Cannot Insert where salary > 1000',16,1); ROLLBACK;
end
else
begin
insert into copytablefrom(store_name, sales, date) values (@store_name, @sales, @date);
Print 'Instead After Trigger Executed';
end
End
위의 구문에서 나는 사용했습니다.RAISERROR('Cannot Insert where salary > 1000',16,1)
하지만 내가 글을 쓸 때RAISERROR('Cannot Insert where salary > 1000')같은 줄에 "Incorrect syntax near '"""라는 오류가 표시됩니다.
여기서 (16,1)의 사용에 대해 설명할 수 있는 사람이 있습니까?
의 심각도 수준입니다.error레벨은 11~20 사이이며 오류가 발생합니다.SQL레벨이 높을수록 레벨과 레벨이 더 심합니다.transaction중단해야 합니다.
다음 작업을 수행할 때 구문 오류가 발생합니다.
RAISERROR('Cannot Insert where salary > 1000').
정확하게 지정하지 않았기 때문입니다.parameters(severity level또는state).
경고를 발령하고 싶지 않은 경우exception수준 0 - 10을 사용합니다.
MSDN에서:
엄한
이 메시지와 관련된 사용자 정의 심각도 수준입니다.msg_id를 사용하여 sp_addmessage를 사용하여 생성된 사용자 정의 메시지를 발생시킬 때 RAISERROR에 지정된 심각도가 sp_addmessage에 지정된 심각도를 재정의합니다.0에서 18 사이의 심각도 수준은 모든 사용자가 지정할 수 있습니다.19 - 25 사이의 심각도 수준은 sysadmin 고정 서버 역할의 구성원 또는 ALTER TRACE 권한을 가진 사용자만 지정할 수 있습니다.19 - 25 사이의 심각도 수준의 경우 WITH LOG 옵션이 필요합니다.
주
0에서 255까지의 정수입니다.음수 값 또는 255보다 큰 값은 오류를 생성합니다.여러 위치에서 동일한 사용자 정의 오류가 발생하는 경우 각 위치에 대해 고유한 상태 번호를 사용하면 오류가 발생하는 코드 섹션을 찾는 데 도움이 될 수 있습니다.자세한 설명은 여기를 참조하십시오.
16은 심각도이고 1은 상태입니다. 보다 구체적으로 다음 예를 통해 구문 및 사용에 대한 자세한 내용을 알 수 있습니다.
BEGIN TRY
-- RAISERROR with severity 11-19 will cause execution to
-- jump to the CATCH block.
RAISERROR ('Error raised in TRY block.', -- Message text.
16, -- Severity.
1 -- State.
);
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
-- Use RAISERROR inside the CATCH block to return error
-- information about the original error that caused
-- execution to jump to the CATCH block.
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
END CATCH;
http://msdn.microsoft.com/en-us/library/ms178592.aspx 에서 더 많은 예제를 팔로우하고 사용해 볼 수 있습니다.
MSDN에 따르면
RAISERROR ( { msg_id | msg_str | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]
16심각할 것입니다.
1국가가 될 것입니다.
필요한 매개 변수를 올바르게 제공하지 않았기 때문에 발생하는 오류입니다.RAISEERROR기능.
예제 코드의 심각도 수준 16은 일반적으로 사용자 정의(사용자 탐지) 오류에 사용됩니다.SQL Server DBMS 자체는 탐지된 문제에 대해 심각도 수준(및 오류 메시지)을 더 높음(더 높음)과 더 낮음(더 낮음)으로 내보냅니다.
상태는 0과 255 사이의 정수여야 하지만(음의 값은 오류를 제공) 기본적으로 프로그래머의 것입니다.사용자 정의 오류에 대한 동일한 오류 메시지가 다른 위치에서 발생하는 경우(예: 오류 발생 위치를 추가로 표시하여 문제의 디버깅/문제 해결에 도움이 되는 경우) 다른 상태 값을 입력하는 것이 유용합니다.
Microsoft의 MSDN에서 가져온 예로 이 질문에 게시된 답변은 좋지만 TRY 블록에서 오류가 발생하지 않는 경우 오류가 어디서 발생하는지 직접적으로 보여주지는 않습니다.저는 CATCH 블록에서 오류가 발생했다는 CATCH 블록 내 RAISERROR 메시지에 대한 매우 사소한 업데이트가 있는 이 예를 선호합니다.저는 이것을 gif에서도 보여줍니다.
BEGIN TRY
/* RAISERROR with severity 11-19 will cause execution
| to jump to the CATCH block.
*/
RAISERROR ('Error raised in TRY block.', -- Message text.
5, -- Severity. /* Severity Levels Less Than 11 do not jump to the CATCH block */
1 -- State.
);
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
/* Use RAISERROR inside the CATCH block to return error
| information about the original error that caused
| execution to jump to the CATCH block
*/
RAISERROR ('Caught Error in Catch', --@ErrorMessage, /* Message text */
@ErrorSeverity, /* Severity */
@ErrorState /* State */
);
END CATCH;
언급URL : https://stackoverflow.com/questions/16170073/what-is-the-syntax-meaning-of-raiserror
'it-source' 카테고리의 다른 글
| Git를 사용하여 여러 작업 디렉토리를 가질 수 있는 방법은 무엇입니까? (0) | 2023.07.05 |
|---|---|
| sql developer를 이용한 대용량 데이터 내보내기 방법 - Oracle (0) | 2023.07.05 |
| R의 "던지기"와 동등한 값 (0) | 2023.07.05 |
| vuex에서 API에서 데이터를 가져오는 방법 (0) | 2023.07.05 |
| '완화' 설정내장된 Tomcat에 대한 QueryChars' (0) | 2023.07.05 |
