2009-06-19 2 views
2

오류 처리가이 저장 프로 시저에 넣을 가치가 있는지 알려 줄 수 있습니까?SQL 오류 처리

-- ********************************************** 
-- Delete and create a new 'Truncate' function... 
-- ********************************************** 

IF EXISTS(SELECT name 
      FROM sysobjects 
      WHERE name = 'truncate_description' AND 
       type = 'FN') 
    DROP FUNCTION truncate_description 
GO 

CREATE FUNCTION truncate_description(@description varchar(1000), @numchars int=500) RETURNS varchar(500) 
BEGIN 
    DECLARE @newDescription varchar(500); 
    DECLARE @truncMessage varchar(33); 
    SET @truncMessage = '..Click on title to read article.'; 

    IF (len(@description) >= @numchars) 
    IF (substring(@description, @numchars, 1) = '.') 
     SET @newDescription = @description; 
    ELSE 
    BEGIN 
     SET @newDescription = substring(@description, 1, @numchars - len(@truncMessage)); 
     IF (charindex('.', @newDescription) > 0) 
     BEGIN 
     WHILE (substring(@newDescription, len(@newDescription), 1) <> '.') 
     BEGIN 
      SET @newDescription = substring(@newDescription, 1, len(@newDescription) - 1); 
     END 
     END 
     SET @newDescription = @newDescription + @truncMessage; 
    END 
    ELSE 
    SET @newDescription = @description; 

    RETURN @newDescription; 
END 
GO 


-- ********************************************* 
-- Delete and create a new 'Truncate' trigger... 
-- ********************************************* 

IF EXISTS(SELECT name 
      FROM sysobjects 
      WHERE name = 'tr_tblProfile_truncateDescription' AND 
       type = 'TR') 
    DROP TRIGGER tr_tblProfile_truncateDescription; 
GO 

CREATE TRIGGER tr_tblProfile_truncateDescription ON tbl_profile 
AFTER INSERT, UPDATE AS 
BEGIN 
    UPDATE tbl_profile 
    SET description = dbo.truncate_description(i.description, 500) 
    FROM tbl_profile p INNER JOIN inserted i on p.id=i.id 
END 
GO 


-- ****************************************** 
-- Run the trigger on all existing records... 
-- ****************************************** 

UPDATE tbl_Profile 
SET description = description 
GO 

많은 감사, 모든

+1

당신은 당신이 특정 기술 질문을하면 대답을 얻기의 더 나은 기회를 가질 수 있습니다. 이것은 '내 일'웹 사이트가 아닙니다. –

+0

@AdamRalph : 그는 * IF * 당신이 그것을 할 것이지 * HOW *가 아닌지 물어보고 있습니다. – fretje

+1

분명히 그는 당신에게 당신의 조언을 물어보기 위해서를 제외하고는 아무 것도하지 말았습니다. . 조언을 주신 덕분에 – Robert

답변

3

첫째 -이 함수가 아닌 저장 프로 시저입니다.

그러나 오류 처리는 항상 좋은 편이지만 SQL 기능은 아마도 넣기에 최적의 장소가 아닙니다.

이 함수가 알려진 SQL 함수 (len, substring)로 알려진 스키마와 알려진 데이터 형식 (varchar)에서 작동한다고 생각하면이 단위 테스트를 수행 할 수 있어야하며 외부 변수로 throw 할 수있는 오류를 고려해야합니다. 함수 자체.

나를 대답하는쪽으로 기울이지 않게합니다. 여기서 오류를 처리하지 마십시오.

+0

주셔서 감사합니다. –

1

귀하의 T-SQL 코딩 내에서 사용자 정의 오류 처리를 구현하는 것은 필자의 의견으로는 좋지는 않지만 좋은 방법이다.

개발하려는 저장 프로 시저/함수가 응용 프로그램 중간 계층의 일부를 구성하는 경우 사용자 지정 오류 처리를 구현하는 것이 좋습니다.

이것은 응용 프로그램 프로세스에서 생성 된 상황에 관련된 오류를 발생시켜 적절한 데이터베이스 내의 일반 오류 로그 테이블에 기록해야한다는 의미입니다.

이 작업을 수행하여 일반적인 try catch 블록에 통합하는 방법에 대한 예제는 SQL Server 온라인 설명서에서 찾을 수 있습니다.

는 특히 섹션 제목 : 모험 작동 데이터베이스에서 오류 처리 솔루션

http://msdn.microsoft.com/en-us/library/ms179296(SQL.90).aspx