2013-09-02 7 views
0

각 사용자가 데이터를 한 번 저장 한 후 트리거를 만드는 방법에 대한 아이디어. 예 : 누군가가 한 번 엔트리에 넣으면 실행될 것입니다. 하지만 두 번째로 '오류 메시지'라고 말하고 싶습니다.SQL2012 마이크로 소프트 트리거

테이블에는 사용자 테이블, 날짜 및 응답이 있습니다.

CREATE TRIGGER [dbo].[prevent_multiple_entry] ON [dbo].[userresponse] 
FOR INSERT 
AS 
BEGIN 
    IF EXISTS(SELECT * FROM userresponse AS U, INSERTED AS I WHERE U.User = I.User) 
    BEGIN 
    RAISERROR('Each user can only submit to the same question once ',16,1) 
    ROLLBACK TRANSACTION 
    END 
END 

'중첩 트리거'와 RECURSIVE_TRIGGERS 설정을 생성하라 있는지 확인하고 사실에 대해 생각 :

이 내이 하나의 시도 지금까지

CREATE TRIGGER [dbo].[prevent_multiple_entry] ON [dbo].[userresponse] 
FOR INSERT 
AS 
IF EXISTS (SELECT Users FROM userresponse) 

BEGIN 
    PRINT 'Error message' 
RAISERROR('Each user can only submit to the same question once ',16,1) 
ROLLBACK 
END 
+7

단순히 고유 인덱스를 사용하지 않는 이유는 무엇입니까? –

답변

0

코딩되어 userresponse TABLE의 이름입니다 해당 테이블의 기존 데이터는 트리거에 의해 검사되지 않습니다.

SET TRANSACTION ISOLATION LEVEL SNAPSHOT은 허점을 설정하므로주의하십시오.

또한 제약 조건을 정의 할 수 있습니다 ...

+0

현재 스타일 조인 구문을 사용해야합니다. http://msdn.microsoft.com/en-us/library/dd172122%28v=vs.100%29.aspx 또한 ROLLABCK 바로 뒤에'RETURN'을 넣습니다. TRANSACTION' 그냥 확실하게 : http://stackoverflow.com/q/1239291/65223 –

+0

예, 내가 있어야합니다 : 존재하는 경우 (선택 * 사용자 응답 U U.User로 삽입 된 U.User = I.User) 및 예 ROLLBACK TRANSACTION 후 RETURN ... – Ice