docusnap-dude
Goto Top

MS-SQL-Trigger: Befehl auslösen wenn Datum erreicht wird

Hallo,

*Brett vor Kopf, Schlauchsteh*

MS-SQL-DB: ich brauch einen Trigger, der ein Enddatum bei eintreffen eines bestimmten Datums hochsetzt, wenn ein zu prüfender Wert = 1 ist.

Sieht so aus:
	UPDATE tMyTable
		SET ContractDateEnd = DATEADD(MONTH,ContractExtensionByMonths,ContractDateEnd) 
	WHERE ContractExtensionAutomated = 1 AND ContractDateEnd = GETDATE()

Im Prinzip im IST so:
  • der Value ContractDateEnd sagt aus: 31.01.2021 (Vertragsende)
  • der Value ContractExtensionAutomated ist "1" (ja, er verlängert sich automatisch)
  • der Wert ContractExtensionByMonths ist "12" (Verlängerung um 12 Monate)

Jetzt muss folgendes passieren: Wenn die SQL-Instance/DB feststellt: Heute ist das Datum 01.02.2021 00:00:00 (also das ContractDateEnd überschritten) dann führe das Statemant aus. Am Ende ist das neue ContractDateEnd der 01.01.2022.

Mit Update/Insert hat das ja nichts zu tun. Da hänge ich gerade....

Danke für Aufhellung im Dunkel face-smile

Content-ID: 655632

Url: https://administrator.de/contentid/655632

Ausgedruckt am: 19.11.2024 um 09:11 Uhr

emeriks
emeriks 24.02.2021 um 10:50:20 Uhr
Goto Top
Hi,
bei Suche im Web nach "tsql time trigger" kommen Ergebnisse. Helfen diese nicht schon weiter?

E.
DocuSnap-Dude
DocuSnap-Dude 24.02.2021 um 11:04:05 Uhr
Goto Top
bei Suche im Web nach "tsql time trigger" kommen Ergebnisse. Helfen diese nicht schon weiter?

Hi, hmm. Teilweise. Kann auch sein das ich völlig quer liege

  • Ok, ich baue zuerst eine StoredProcedure, verstanden. Kein Ding.
  • Wie löse ich diese aus (also das EXCUTE der SP).... Mit nem Job. Hmm. Brauch ich nen SQL-Agent (hab ich bei ner EXPRESS nicht)
  • kann ich das EVENT anders auslösen...Hmm... nur wenn ich ein Insert/update mache (das ist aber nicht kontrollierbar).

Schussfolgerung von mir: die SP kann ich nur auslösen lassen per SQL_Agent oder aber Script aus dem OS heraus (bei ner Express)...oder?
emeriks
Lösung emeriks 24.02.2021 aktualisiert um 11:23:29 Uhr
Goto Top
Du könntest irgendwo ein PS Script laufen lassen, welches regelmäßig per Scheduled Task gestartet wird und die StoredProcedure ausführen lässt.

Edit:
z.B. (erster Treffer) Execute SQL Server Stored Procedures from PowerShell
ukulele-7
Lösung ukulele-7 24.02.2021 um 11:27:08 Uhr
Goto Top
Korrekt, Du suchst streng genommen gar keinen Trigger, der kann nämlich nur auf Ereignisse (Insert / Update / Delete) reagieren, du suchst eher einen Job der täglich läuft. SQL Express hat keinen Agent, daher musst du dir anders behelfen.

Eine Möglichkeit wäre ein Windows Task a la
"C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\SQLCMD.EXE" -S "<servername>\SQLEXPRESS" -U "<benutzer>" -P "<passwort>" -i "D:\<sql-script>.sql"  
SQL CMD muss dafür erlaubt sein, das kann am Server aktiviert werden. Natürlich kannst du dann auch direkt die SP ausführen, ohne ein Script aus einer Datei zu laden. User und Passwort stehen dann im Task im Klartext! Es bietet sich daher an einen User nur mit Rechten auf die SP und die betroffenen Tabellen zu erstellen.
emeriks
Lösung emeriks 24.02.2021 um 11:36:18 Uhr
Goto Top
Zitat von @ukulele-7:
User und Passwort stehen dann im Task im Klartext!
Man kann doch direkt den Windows Users im MS SQL berechtigen, unter welchem der Task dann läuft. Dann muss man in der Kommandozeile oder im Script auch keine extra Anmeldedaten für einen SQL-Benutzer mitgeben.
DocuSnap-Dude
DocuSnap-Dude 24.02.2021 aktualisiert um 12:32:50 Uhr
Goto Top
Korrekt, Du suchst streng genommen gar keinen Trigger, der kann nämlich nur auf Ereignisse (Insert / Update / Delete) reagieren, du suchst eher einen Job der täglich läuft. SQL Express hat keinen Agent, daher musst du dir anders behelfen.

Jepp, das hast du treffend formuliert. Genau da hing ich im Kopf irgendwie fest. Eure Antworten bestätigen meine anfängliche Vermutung somit, Danke euch allen!