2009-06-17 7 views
0

Ich habe die folgenden Trigger in SQL Server geschrieben:Schreiben Sie Trigger in MS SQL Server genauso wie das Schreiben in MS Access?

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 

Wird dies in MS Access laufen kann oder ist die Syntax anders?

Antwort

3

Die Access-Datenbank-Engine (früher Jet) hat keine Trigger und hat keine Syntax für die Flow-Kontrolle, z. Ein PROCEDURE muss genau eine SQL-Anweisung enthalten.

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

Zum Beispiel könnten Sie einen neuen Schlüssel mit einer UNIQUE-Einschränkung für Rechnung (cust_num, Inv_Amt), einen FOREIGN KEY-Kunden (ID, Betrag) erstellen, um den neuen Schlüssel zu referenzieren, eine VIEW, die die beiden Tabellen verbindet FOREIGN KEY-Spalten und alle vier Spalten verfügbar machen, dann INSERT in die VIEW statt die Tabelle "Rechnung"; Möglicherweise möchten Sie Berechtigungen verwenden, um INSERTs für die Basistabelle zu verhindern, aber die Sicherheit auf Benutzerebene wurde aus der neuen Access 2007-Engine (ACE) entfernt.

Aber, wenn es Ihnen nichts ausmacht, dass ich sage, ich denke, dass Ihr Auslöser kein reales Lebensszenario widerspiegelt. Eine Spalte, die in der Tabelle 'Kunde' vage 'Betrag' genannt wurde, um den letzten Rechnungsbetrag zu halten? Was ist, wenn die eingefügte logische Tabelle Zeilen für mehr als einen Kunden enthält? Wie gesagt, ich denke, Sie müssen uns sagen, was Sie wirklich erreichen wollen.

+0

Sie haben recht damit, dass es kein reales Lebensszenario ist. Ich arbeite an einer Aufgabe, bei der ich einen Trigger schreiben muss, um eine ähnliche Aufgabe in Oracle oder MS Access zu erledigen. Und weil ich Oracle nicht habe, bin ich gezwungen, MS Access zu verwenden, aber MS Access verwendet keine Trigger, aber ich dachte, ich würde es in SQL Server versuchen. – Draco

+0

Die Download-Website von Oracle informiert mich: "Alle Software-Downloads sind kostenlos und jeder wird mit einer Entwicklungslizenz geliefert, mit der Sie Vollversionen der Produkte kostenlos nutzen können, während Sie Ihre Anwendungen entwickeln und prototypisieren" (http://www.oracle.org). com/technology/software/index.html) – onedaywhen

+0

Meine Firma hat unbegrenzte Nutzung der Oracle-Datenbank Enterprise Edition und ich bin immer noch nicht dazu gekommen, es zu installieren. Topf ... Kessel ... schwarz ...:) – onedaywhen

0

MS Access hat keine Trigger.

Das ist die Access Jet-Engine (die MDB-Dateien erstellt). Wenn Access eine Verbindung zu einem Datenbankserver herstellt, verwendet er alle Trigger, die sich in dieser Datenbank befinden.

0

Ich habe noch nie Auslöser in Access gefunden, es sei denn, es handelt sich um ADP auf SQL Server. Ihre Antwort lautet also "Ja". Dies gilt auch für SQL Server für das Back-End und "Nein", wenn die Tabelle in Access gespeichert ist.

+0

Ein ADP hat keine Trigger. Die dort verfügbaren Trigger werden von SQL Server bereitgestellt. –

2

Access nicht Auslöser haben

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

Trigger Feuer pro Charge üben nicht pro Zeile, lesen sie bitte Multirow Considerations for DML Triggers

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

+0

Hören Sie auf den Mann, er weiß, wovon er spricht – HLGEM