Frage

Ich habe die folgenden Trigger in SQL Server geschrieben:

create trigger test_trigger
on invoice -- This is the invoice table
for insert
as
declare @invoiceAmount int    -- This is the amount specified in the invoice 
declare @custNumber int       -- This is the customer's id

--use the 'inserted' keyword to access the values inserted into the invoice table
select @invoiceAmount = Inv_Amt from inserted 
select @custNumber = cust_num from inserted


update customer
set amount = @invoiceAmount
where Id = @custNumber

Werden diese in der Lage sein, in MS Access zu laufen oder die Syntax anders?

War es hilfreich?

Lösung

Der Access-Datenbank-Engine (früher unter dem Namen Jet) keine Trigger und unabhängig hat keine Kontrolle-of-Flow-Syntax z.B. eine Prozedur von genau einer SQL-Anweisung bestehen muss.

Sagen Sie uns, was Sie wirklich wollen, und es könnte eine alternative Syntax sein.

Zum Beispiel könnten Sie einen neuen Schlüssel eine UNIQUE-Einschränkung auf Rechnung mit (cust_num, Inv_Amt) erstellen, einem Fremdschlüssel Kunden (id, Menge), um den neuen Schlüssel zu verweisen, eine Ansicht, die die beiden Tabellen auf dem AUSLäNDISCHEN verbinden KEY Spalte und alle vier Spalten aussetzt, INSERT dann in die VIEW anstatt die Tabelle ‚Rechnung‘; Sie mögen Privilegien verwenden Einfügungen in die Basistabelle, sondern Sicherheit auf Benutzerebene von dem neuen Access 2007-Engine (ACE genannt) entfernt zu verhindern.

Aber, wenn du mir nicht etwas dagegen zu sagen, ich glaube, Ihre Trigger keinen wirklichen Leben Szenario widerspiegelt. Eine Spalte vagee Bezeichnung ‚Menge‘ in der Tabelle ‚Kunde‘ den letzten Rechnungsbetrag zu halten? Was ist, wenn die eingelegte logische Tabelle enthält Zeilen für mehr als einen Kunden? Wie gesagt, ich glaube, Sie brauchen, um uns zu sagen, was Sie wirklich erreichen wollen.

Andere Tipps

Access nicht Auslöser haben

Ihre Trigger, die Sie hier zeigen Bombe aus, da sie nicht in Betracht ziehen mehrreihigen aktualisiert der Moment jemand mehr als eine Zeile aktualisiert (und nicht sagen, es wird nicht passieren, weil es besser, einige defensive Codierung zu üben)

Trigger Feuer pro Charge nicht pro Zeile, lesen Sie bitte MultiRow Überlegungen für DML Trigger

eingefügt Pseudo-Join-Tabelle und die Rechnungstabelle stattdessen die Werte zu aktualisieren ..., die für 1 und mehr als 1 Zeile

funktioniert

MS Access nicht Auslöser hat.

Das heißt, die der Access-Jet-Engine (die MDB-Dateien erstellt). Wenn der Zugriff auf einen Datenbankserver verbindet, dann wird es verwenden, was Auslöser in dieser Datenbank ist.

Ich habe noch nie begegnet löst in Access, wenn es mit ADP auf SQL Server zu tun ist. So Ihre Antwort ist ja, es ist das gleiche, wenn Sie auf SQL Server für das Backend sind, und nicht, wenn die Tabelle in Access gespeichert wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top