Ich wurde aufgefordert, Code zu implementieren, der eine Zeile in einer MS SQL Server-Datenbank aktualisiert und dann ein gespeichertes Proc verwendet, um das Update in eine Verlaufstabelle einzufügen. Wir können keinen gespeicherten Prozess hinzufügen, da wir die Datenbank nicht steuern. Ich weiß in gespeicherten Procs können Sie das Update durchführen und dann auf einem anderen gespeicherten Proc ausführen aufrufen. Kann ich es in Code mit einem SQL-Befehl einrichten?Eine Einfügung ausführen und dann einen SQL-Befehl anmelden
Antwort
Entweder führen Sie beide in der gleichen Anweisung (trennen Sie die separaten Befehle durch ein Semikolon) oder verwenden Sie eine Transaktion, so dass Sie die erste Anweisung zurücksetzen können, wenn der 2. fehlschlägt.
Sie können auch SQL-Trigger erstellen.
Wenn er nicht eine gespeicherte Prozedur erstellen, er kann mit ziemlicher Sicherheit keinen Trigger – foxxtrot
Abhängig von Ihrer Bibliothek können Sie normalerweise beide Abfragen in eine Befehlsstring setzen, getrennt durch ein Semikolon.
Dank erstellen, dann ist es MS SQL vb.net mit 2005. Ich werde das Semikolon versuchen. – osp70
Unzureichende Informationen - welcher SQL Server? Warum haben Sie eine Verlaufstabelle?
Auslöser werden so etwas tun. MySQL's binlog könnte für Sie nützlicher sein.
Sie sagen, dass Sie die Datenbank nicht kontrollieren. Kontrollieren Sie den Code, der darauf zugreift? Fügen Sie die Protokollierung dort hinzu und halten Sie sie vollständig vom SQL-Server fern.
Die Protokolltabelle wird von der Anwendung verwendet, um Aktualisierungen der Elemente anzuzeigen. Nicht nur ein Transaktionsprotokoll für die Wiederherstellung. – osp70
Sie brauchen nicht wirklich ein gespeichertes proc für dieses. Die Frage läuft wirklich darauf hinaus, ob Sie Kontrolle über alle Einsätze haben oder nicht. Wenn Sie tatsächlich auf alle Einfügungen zugreifen können, können Sie einfach eine Einfügung in die Datentabelle und eine Einfügung in die Verlaufstabelle in einer einzigen Transaktion einfügen. Dadurch wird sichergestellt, dass beide für den Erfolg abgeschlossen werden. Wenn Sie jedoch innerhalb einer Transaktion sequenziell auf Tabellen zugreifen, müssen Sie sicherstellen, dass Sie die Historientabelle und die Datentabelle nicht sperren, da andernfalls eine Deadlock-Situation auftreten könnte.
Wenn Sie jedoch keine Kontrolle über die Einfügungen haben, können Sie bestimmten db-Systemen einen Trigger hinzufügen, der Ihnen Zugriff auf die geänderten, eingefügten oder gelöschten Daten gewährt. Es gibt Ihnen möglicherweise alle Daten, die Sie benötigen, z. B. wer die Einfügung durchgeführt, aktualisiert oder gelöscht hat, aber es wird Ihnen sagen, was sich geändert hat.
Vielen Dank für Ihre Antwort, unten ist eine Zusammenfassung dessen, was ich getan habe. Jetzt testen, um zu sehen, ob das Trans im Falle eines Fehlers tatsächlich zurückgesetzt wird.
sSQL = "BEGIN TRANSACTION;" & _
" Update table set col1 = @col1, col2 = @col2" & _
" where col3 = @col3 and " & _
" EXECUTE addcontacthistoryentry @parm1, @parm2, @parm3, @parm4, @parm5, @parm6; " & _
"COMMIT TRANSACTION;"
Yep, löschte die gespeicherte proc in meiner Testumgebung und wenn die sql einen Fehler warf, muss das Update zurückgerollt werden, da die Info die gleiche wie der Start war. Danke allen! – osp70
- 1. Anmelden und dann eine Thread-sichere Anfrage machen
- 2. NSFetchedResultsController und Array. Einfügung
- 3. Verzögerung dann ausführen Aufgabe
- 4. Ausführen dann nach Fang
- 5. Laravel, kann einen Benutzer nicht durch ID anmelden und ihn dann umleiten
- 6. einen Fehler und dann Verzweigung Logik
- 7. SQLite.net eine Einfügung mit Fremdschlüssel
- 8. Einfügung für jede Zeile aus einer Auswahl ausführen?
- 9. korrekte Art und Weise einen Ajax-Synchron POST ausführen und dann einreichen Form
- 10. Funktion ausführen dann folgen Link
- 11. anmelden, abmelden und anmelden Umleitung fehlgeschlagen
- 12. Android Anmelden und Registrieren
- 13. Registrieren und Anmelden swift
- 14. Javascript PHP-Datei ausführen und dann Datei herunterladen
- 15. Führt P/Invoke die DLL ausführen und dann herunterfahren?
- 16. MySQL Query, Bulk-Einfügung
- 17. Wie Anfrage Eingabestrom mit Httpmodule anmelden, dann zurückgesetzt Input Position
- 18. Batch als Admin ausführen (automatisches Hochfahren) und dann wieder entfernen
- 19. immer anmelden und logrotate
- 20. Automatisch einen Browser öffnen und sich auf einer Site anmelden?
- 21. Python-Subprozesssatz Shell-Var. und dann Befehl ausführen - wie?
- 22. Mehrere Abfragen ausführen, dann mit LINQ verbinden?
- 23. Batch-Einfügung in OrientDB
- 24. Einen Node.js Server und eine Datenbank auf Azure ausführen
- 25. mit curl in eine Website anmelden
- 26. Stuck mit Laravel Einfügung
- 27. C#: Einen Windows-Dienst ausführen und debuggen
- 28. So führen Sie eine Einfügung in select
- 29. Mit VBA eine Formel ausführen und dann zur nächsten Zeile springen
- 30. Code aus einem Python-Modul ausführen, Modul ändern und dann erneut ausführen, ohne interpeter zu beenden
Gab dir das akzeptieren, da dies mich auf den richtigen Weg gebracht hat. Vielen Dank. – osp70