2016-06-27 2 views
0

EDIT: Ich fand später heraus, es ist nicht notwendig, die Existenz von Tabellen, Trigger usw. zu überprüfen, wenn Sie Visual Studio DB-Projekte verwenden.Erstellen einer Triggeranweisung in einer IF OBJECT_ID ('TableName', 'U'): Falsche Syntax in der Nähe von 'BEGIN'. EXTERN erwartet

Wie kann ich einen Trigger erstellen? Der folgende Fehler gibt mir den folgenden Fehler:

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. 

Dies ist in einem visuellen Studio-Datenbank-Projekt. Nein, das ist kein Clr-Trigger. Es gibt mir nur diesen Fehler, wenn der Create-Trigger innerhalb einer if-Anweisung ist.

+1

ist dies ein clr Trigger, bitte – TheGameiswar

+0

gesamten Code googeln der Fehlertext zeigte mindestens 2 verschiedene Gründe für diesen Fehler posten. Wir müssen mehr Code sehen. –

+1

Das Problem ist in einem der 4 Punkte zwischen dem Beginn Ende. Für detailliertere Informationen müssen Sie die Punkte heranziehen, damit wir lesen können, was in ihnen ist. – GuidoG

Antwort

0

Ich habe es zu dem folgenden geändert. Dies scheint zu funktionieren.

Die folgende Prüfung ist bei Verwendung von DB-Projekten nicht notwendig. Ich hatte keine Erfahrung mit db-Projekten.

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

Warum suchen Sie nach Existenz? Der springende Punkt bei DB/SQL-Projekten ist, dass Sie Ihr Projekt mit der Datenbank vergleichen und synchronisieren. Wenn der Trigger nicht vorhanden ist, wird er erstellt. Sie müssen keinen zusätzlichen Code hinzufügen, um dies zu überprüfen. Wenn es existiert, wird es geändert, um es wie nötig synchron zu bringen. –

+1

Danke, ich hatte vorher keine Erfahrung mit db-Projekten und habe erst kürzlich gelernt, wie es funktioniert. –

+1

Dies könnte hilfreich sein - Zusammenstellung meiner Erfahrungen w/SSDT - https://schottsql.wordpress.com/2013/10/22/all-ssdt-articles/ - nicht behaupten, ein Experte zu sein, aber es könnte hilfreich sein loslegen. –

Verwandte Themen