안녕하세요
실행된 프로시저를 로그로 테이블에 쌓아서 관리하려고 합니다.
예를 들어 아래와 같이 프로시저를 실행을 하면,
exec dbo.USP_GET_TEST_DATA @PARAM1 = 'A', @PRAM2 = 'B' , @PRAM3 = 123
프로시저 내부에서 실행된 프로시저 와 파라메터 구문을 그대로 로그테이블에 입력하려고 합니다.
오류가 발생하였을때는 TRY CATCH 구문에서 ERROR로그를 로그테이블에 업데이트 하여 오류 로그도 함께 관리 합니다.
아래의 예처럼 SP_TEXT컬럼의 구문을 프로시저가 실행되는 내부에서 확인하는 방법이 있으면 알려주세요. ㅎㅎ
유사한 방법이라도 조언부탁드립니다.
감사합니다.
SEQ | SP_TEXT | ERROR | TIME |
1 | exec dbo.USP_GET_TEST_DATA @PARAM1 = 'A', @PRAM2 = 'B' , @PRAM3 = 123 | PRIMARY KEY 제약 조건 'PK_TI'을(를) 위반했습니다. 개체 'dbo.TI_TRD'에 중복 키를 삽입할 수 없습니다. 중복 키 값은 (123)입니다. 에러가 발생함 | 2018-08-10 10:37:40.450 |
2 | exec dbo.USP_GET_TEST_DATA @PARAM1 = 'A', @PRAM2 = 'B' , @PRAM3 = 123 | NULL | 2018-08-10 10:38:40.450 |
개인적으로.. 시스템 테이블을 뒤져서 만들어 보려고 했는데
입력된 파라메터의 값을 입력하는 부분이 어렵네요.. 파라메터 데이터 타입도 다르고
이렇게 까지 안해도 방법이 있을것 같은데 ㅜㅜ
아래쿼리는 그냥 참고 부탁드립니다.
SELECT SP_TEXT = 'EXEC ' + OBJECTNAME + ' ' + SUBSTRING(PARAM, 0, LEN(PARAM))
FROM (
SELECT DISTINCT OBJECTNAME = SO.NAME
, PARAM = (
SELECT P.NAME + ' = '''', '
FROM SYS.PARAMETERS AS P
WHERE SO.OBJECT_ID = P.OBJECT_ID
FOR XML PATH('')
)
FROM SYS.OBJECTS AS SO
WHERE OBJECT_ID = OBJECT_NAME(@@PROCID) -- 프로시저 내부
--WHERE TYPE IN ('P')
) A
Comment 1
-
처리짱
2018.08.10 16:58
SQL안에서는 안될텐데요.
웹이나 어플, 미들웨어 등에서 프로시져를 호출할때 excute가 실패하면 호출상태를 별도로 저장해야 할거 같습니다.