아래의 SQL 문은 중첩 된 세부 정보로 예외를 throw하는 일부 SQL의 좋은 예입니다. 내가 외부 예외 세부 사항 Could not create constraint. See previous errors
만을 얻을 수 있다는 진술의 캐치 부분에있는 것 같습니다 (별로 유용하지는 않습니다!). 사이클 또는 여러 개의 계단식 경로를 일으킬 수 FOREIGN KEY 제약 'FK_TWO'테이블 'TABLE2'에 소개SQL Server try-catch 내부 예외 메시지 수수께끼
: 내가 얻고 싶은 것은 내부 예외 메시지입니다. ON DELETE NO ACTION 또는 ON UPDATE NO ACTION을 지정하거나 다른 FOREIGN KEY 제약 조건을 수정하십시오 (try-catch없이 코드를 실행하여 이 메시지를받을 수 있음).
Catch 블록에서 T-SQL을 어떻게 구현할 수 있습니까?
BEGIN TRY
BEGIN TRAN;
CREATE TABLE TABLE1 (USER_ID INTEGER NOT NULL PRIMARY KEY, USER_NAME
CHAR(50) NOT NULL);
CREATE TABLE TABLE2 (AUTHOR_ID INTEGER NOT NULL PRIMARY KEY, AUTHOR_NAME
CHAR(50) NOT NULL, LASTMODIFIEDBY INTEGER NOT NULL, ADDEDBY INTEGER NOT
NULL);
ALTER TABLE TABLE2 ADD CONSTRAINT FK_ONE FOREIGN KEY (LASTMODIFIEDBY)
REFERENCES TABLE1 (USER_ID) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE TABLE2 ADD CONSTRAINT FK_TWO FOREIGN KEY (ADDEDBY)
REFERENCES TABLE1(USER_ID) ON DELETE NO ACTION ON UPDATE CASCADE;
COMMIT TRAN;
END TRY
BEGIN CATCH
DECLARE @ERROR_MSG NVARCHAR(MAX), @SEVERITY INT, @STATE INT
SELECT @SEVERITY = ERROR_SEVERITY(), @STATE = ERROR_STATE()
, @ERROR_MSG = ERROR_MESSAGE() + ' err src line: ' + CAST(ERROR_LINE() AS NVARCHAR(20)) + ' ' + ISNULL(ERROR_PROCEDURE(), '');
ROLLBACK;
-- RE-THROW EXCEPTION FOR DIAGNOSTIC VISIBILITY
RAISERROR (@ERROR_MSG ,@SEVERITY, @STATE);
END CATCH;
[편집]
그래서 그 후 많은이 문제에 대한 해결책이 없다는 것을 검색하는 것 같다. 잘만되면 그들은 미래 버전에서 이것을 고칠 것이다.
나는 이것을 할 방법이 없다고 생각합니다. 관련 질문 : [단일 명령문에서 여러 오류 메시지 캡처] (http://stackoverflow.com/questions/3697492/capturing-multiple-error-messages-from-a-single-statement) –