2012-05-14 3 views
0

다음 테이블이있는 상황이 있습니다.값 절에 레코드를 삽입하지 않고 insert 문을 실행하는 방법 절

create table Bulk_Data 
    (
    id int identity(1,1), 
    UserName varchar(100) not null default 'default value ', 
    iPartitionID int null 
    ) 

또한 삽입 트리거가 Bulk_Data에 있습니다. i가 모든 값에 의존하지 않는 3 열이 같이 상기 테이블

create trigger dbo.Bulk_Data_IU on Bulk_Data 
AFTER INSERT 
AS Begin 

    Merge Bulk_Data p1 
    using Bulk_Data p2 on p1.id = p2.id 
    when matched then 
     update set p1.iPartitionID = right(p2.id,1); 

end 

조건이다. 1] id는 ID 자동 증분 열 입니다. 2] UserName은 기본값으로 설정됩니다. 3] iPartitionID는 트리거의 삽입을 기반으로합니다.

그래서 내 질문에 레코드를 삽입해야한다고 가정 해 봅시다. 2 번 열에 값을 삽입하려면 테이블에 삽입 명령을 실행해야합니다.

왜냐하면 삽입 트리거가 생성되어 삽입 명령이 중요하기 때문입니다.

내가

insert Bulk_Data(UserName) values('Suraj Sheikh') 

잘 작동하지만 난 어떤 사용자 이름을 삽입하지 않으려면을 실행할 때.

이 가능합니까?

여기서 도와주세요.

+0

왜 병합 명령문을 단독으로 실행할 수 있습니까? 왜 각 삽입에 대한 iPartitionID 열 (모든 행)을 계산하고 싶습니까? 'inserted' 테이블을 사용하여 수정할 행을 결정하거나 트리거 대신 계산 된 열'iPartitionID right (pd.id, 1)'을 사용할 수 있습니다. –

+0

내가 프로세스를 자동화하고 싶어하기 때문입니다. –

+0

계산 된 열은 트리거가 필요없이 자동화됩니다. –

답변

2

각 삽입에 대한 모든 행을 업데이트하는 트리거 대신 계산 된 열을 사용할 수 있습니다.

create table Bulk_Data 
    (
    id int identity(1,1), 
    UserName varchar(100) not null default 'default value ', 
    iPartitionID as id % 10 persisted 
    ) 
+0

완벽하게 작동합니다. –

1

"AFTER INSERT"트리거 대신 "대신 OF"트리거를 사용하십시오.

INSTEAD-OF 트리거는 SQL Server에서 매우 강력한 개체입니다. 그들은 개발자가 데이터베이스 엔진을 돌리면서 사용자가하려고하는 것과 다른 것을 할 수 있습니다.

이렇게하면 삽입 쿼리가 해당 테이블에서 실행될 때 삽입이 발생하지 않으며 트리거에 기록 된 모든 문이 실제로 db에 적용됩니다.

제한 사항 - DELETE/UPDATE 동작이 정의 된 외부 키가있는 테이블에 DELETE/UPDATE 트리거 대신 INSTEAD OF DELETE/UPDATE 트리거를 정의 할 수는 없지만 Insert Trigger를 정의 할 수 있습니다.

+0

맞습니다. 그러나 어떤 레코드도 삽입하지 않고 insert 문을 실행할 수 있습니다. statemtent 만 삽입하면됩니다. –

+0

트리거 대신 삽입 할 코드를 작성하지 마십시오. 그래서 아무것도 테이블에 삽입되지 않습니다. –

+0

좋아, 나는 그것을 방아쇠 대신에 시도 할 것이다. –

관련 문제