2012-03-06 5 views
0

삽입되거나 업데이트 될 때마다 셀을 제로 패드하는 SQL 트리거가 필요합니다. 궁금한 점이 있다면 업데이트 명령에서 수행하는 것처럼 두 개의 문자열을 함께 추가하는 것이 가장 좋습니다. 이것이 최선의 방법일까요?SQL 트리거를 사용하여 행을 업데이트하십시오.

CREATE TRIGGER PadColumnTenCharsInserted ON Table 
AFTER INSERT 
AS 

DECLARE 
    @pad_characters VARCHAR(10), 
    @target_column NVARCHAR(255) 

SET @pad_characters = '0000000000' 
SET @target_column = 'IndexField1' 

IF UPDATE(IndexField1) 
BEGIN 
    UPDATE Table 
    SET IndexField1 = RIGHT(@pad_characters + IndexField1, 10) 
END 

GO 
+1

** ** 데이터베이스 시스템 및 버전은 무엇입니까 ?? ** SQL **은 많은 데이터베이스 시스템에서 사용되는 언어 인 구조화 된 쿼리 언어입니다 - SQL은 ** 데이터베이스 제품이 아닙니다 ** 이러한 제품은 벤더에 따라 매우 다양합니다. 사용중인 데이터베이스 시스템 .... –

답변

1

귀하의 패딩 코드는 정상적으로 보입니다.

UPDATE Table 

업데이 트를 트리거 트리거 단지 행 : 대신 같은 테이블의 모든 행을 업데이트하는

또한

UPDATE updated 

을, 당신은 여전히 ​​외부 코드를 가지고 - @target_column과 관련된 모든 것. INSERT 트리거인지 UPDATE 트리거인지 잘 모르는 것 같습니다. 나는 AFTER INSERTIF UPDATE을 본다.

0

두 가지 질문 :

  1. 당신은 @target_column에 뭐하는거야? 그것을 선언하고 열 이름으로 설정하지만, 결코 사용하지 마십시오. 후속 SQL 문에서 변수를 사용하려는 경우 EXECUTE()에서 명령문을 래핑하거나 sp_executesql()을 사용해야 할 수 있습니다.

  2. "UPDATE Table ..."구문은 "Table"이 업데이트 할 테이블의 이름이라고 가정하고 업데이트 구문에 대해 OK입니다. 누락 된 것으로 보이는 것은 어떤 종류의 필터입니다. 아니면 전체 테이블의 모든 행에 대해 해당 열을 업데이트하려고하십니까?
    이 문제를 처리하는 한 가지 방법은 다른 변수를 선언하고 업데이트 된 행의 PK로 설정 한 다음 where 절을 사용하여 해당 행만 업데이트하도록 제한하는 것입니다. 이런 식으로 뭔가 :

    DECLARE이 int로 @id

    SELECT @id = RECORD_ID INSERTED

    FROM

    - RECORD_ID = @id

  3. 내가 좋아하는 여기 트리거의 몸

    패딩 코드. 그것은 나에게 좋아 보인다.

관련 문제