2016-06-27 1 views
0

편집 : 나중에 Visual Studio DB Project를 사용하는 경우 테이블, 트리거 등의 존재 여부를 확인할 필요가 없음을 알았습니다.IF OBJECT_ID ('TableName', 'U') 내에 트리거 문을 만듭니다. 'BEGIN'근처의 구문이 잘못되었습니다. Exterior EXTERNAL

트리거를 만들려면 어떻게해야합니까? 다음은 아래 오류를 보여줍니다.

IF OBJECT_ID('SomeSchema.tableName', 'U') IS NOT NULL 
BEGIN 
    CREATE TABLE SomeSchema.tableName (... 
); 
END 
GO 

IF OBJECT_ID('SomeSchema.tableName', 'U') IS NOT NULL 
BEGIN 
    CREATE TRIGGER [SomeSchema].[triggername] 
    ON [SomeSchema].[tableName] 
    FOR UPDATE 

    AS 
    BEGIN 
    IF @@ROWCOUNT = 0 RETURN 

    SET NOCOUNT ON 

    UPDATE SomeSchema.tableName 
     SET SomeColumn = GETUTCDATE(), 
      OtherColumn  = HOST_NAME() 
     FROM SomeSchema.SomeTable INNER JOIN INSERTED ON INSERTED.ID = 
      SomeSchema.SomeTable.Id 
    END 
END 

Error: 
SQL80001: Incorrect syntax near 'BEGIN'. Expecting EXTERNAL. 

이것은 시각적 인 스튜디오 데이터베이스 프로젝트에 있습니다. 이것은 clr 트리거가 아닙니다. 생성 트리거가 if 문 안에있을 때만이 오류가 발생합니다.

+1

이 코드는 clr 트리거이며, 전체 텍스트를 – TheGameiswar

+0

에 올리십시오.이 텍스트는 최소한 2 가지 이유가 있습니다. 우리는 더 많은 코드를 볼 필요가있다. –

+1

문제는 시작 부분 사이의 4 도트 중 하나에 있습니다. 더 자세한 정보를 얻으려면 점들을 확대해야합니다. 그래서 우리는 그 안에 무엇이 있는지 읽을 수 있습니다 .... – GuidoG

답변

0

다음과 같이 변경했습니다. 이것은 작동하는 것 같습니다.

DB 프로젝트를 사용하는 경우 다음 검사는 필요하지 않습니다. DB 프로젝트에 대한 경험이 전혀 없습니다.

IF OBJECT_ID(N'triggername') IS NOT NULL 
DROP TRIGGER triggername 
go 

CREATE TRIGGER triggername 
    ON tablename 
FOR UPDATE 
AS 
BEGIN 
    IF @@ROWCOUNT = 0 RETURN 

    SET NOCOUNT ON 

    UPDATE ... 
END 
+1

왜 존재를 확인하고 있습니까? DB/SQL 프로젝트의 전체 요점은 프로젝트를 데이터베이스와 비교하여 동기화시키는 것입니다. 방아쇠가 존재하지 않으면, 생성됩니다 - 당신은 그것을 확인하기 위해 여분의 코드를 넣을 필요가 없습니다. 존재하는 경우 필요에 따라 동기화되도록 변경됩니다. –

+1

감사합니다. 이전에는 db 프로젝트에 대한 경험이 없었고 최근에는 어떻게 작동 하는지를 배웠습니다. –

+1

SSDT (https://schottsql.wordpress.com/2013/10/22/all-ssdt-articles/)를 사용하여 경험을 쌓으면 도움이 될 수 있습니다. 전문가는 아니지만 도움이 될 수 있습니다. 시작하다. –

관련 문제