2016-08-16 2 views
0

Ich möchte einen MSSQL-Trigger machen, der in Everyday startet, wenn sich das Datum ändert.SQL Trigger löscht alle 24 Stunden

+1

BTW, es * ist * kein 00.00 (oder pm). Es ist entweder Mitternacht oder Mittag. Die heutige Pedanterie wurde dir durch den Buchstaben "P" und die Zahl "42" gekauft :-) – paxdiablo

+0

Du meinst, Du möchtest den Abzug nicht sofort, sondern um 12:00 Uhr für jeden Datensatz, der sich geändert hat? – Whencesoever

+3

Sie müssen JOB nicht auslösen. – Serg

Antwort

0

Sie müssen Zeitplan ein JOB in SQL, die in definierten Zeit ausgelöst wird und setzen Sie Ihre Abfrage in JOB

  • den SQL Server-Agent-Knoten erweitern und rechts klicken Sie auf den Knoten Aufträge in SQL Server Agent und wählen Sie "Neuer Job".
  • Geben Sie im Fenster "Neuer Job" den Namen des Jobs und eine Beschreibung auf der Registerkarte "Allgemein" ein.
  • Wählen Sie "Schritte" auf der linken Seite des Fensters und klicken Sie unten auf "Neu".
  • Geben Sie im Fenster 'Schritte' einen Schrittnamen ein und wählen Sie die Datenbank aus, für die die Abfrage ausgeführt werden soll.
  • Fügen Sie den T-SQL-Befehl ein, den Sie im Befehlsfenster ausführen möchten, und klicken Sie auf "OK".
  • Klicken Sie auf das Menü "Zeitplan" auf der linken Seite des Fensters Neuer Job und geben Sie die Zeitplaninformationen ein (z. B. täglich und eine Uhrzeit).
  • Klicken Sie auf "OK" - und das sollte es sein.
+0

Ich habe SQL Express, die keinen SQL Server Agent haben. Irgendeine andere Lösung? –

+0

Sie können auch eine Anwendung, die Ihre SQL-Anweisung rechtzeitig ausführen –

1

Für MSSS Express-Editionen erstellen MS Windows Job, die Sqlcmd starten, sehen https://technet.microsoft.com/en-us/library/ms165702(v=sql.105).aspx , die ein SQL-Skript ausgeführt wird. Hinweis: Wenn sqlcmd über die Befehlszeile ausgeführt wird, verwendet sqlcmd den OLE DB-Provider.

So erstellen Sie einen Sqlcmd-Auftrag mithilfe von Windows Taskplaner https://support.microsoft.com/en-us/kb/2019698. Dieser Artikel behandelt DB-Sicherungsaufgabe. Ersetzen Sie das Sql-Skript in Schritt A durch das, das Sie benötigen, und passen Sie die folgenden Schritte entsprechend an.

+0

Vielen Dank .. Aber wie man Job-Zeitplan mit sqlcmd machen. Bitte geben Sie mir einen Link oder einen Vorschlag, wenn Sie haben. –

+0

Siehe bearbeitete Antwort – Serg

0

Für diesen Zweck können Sie PowerShell und Task Sheduler verwenden. Alle folgenden Aktionen müssen auf dem Computer ausgeführt werden, auf dem SQL Server ausgeführt wird.

Zuerst erstellen Sie .sql Datei mit einer Charge zu laufen. Ich nenne es my_batch.sql. F. e. mit diesem innen:

USE [MyDB] 

INSERT INTO [dbo].[test] 
      ([id] 
      ,[somevalue] 
      ,[New Column] 
      ,[NewColumn]) 
    VALUES 
      (NEWID() 
      ,'testing' 
      ,'test' 
      ,'just a test') 

Sie GO nicht in diesem Skript verwenden!

erstellen Dann .ps1 Skript, das Batch-Datei (my_batch.ps1) auszuführen:

$conn=new-object System.Data.SqlClient.SQLConnection 
$ConnectionString = "Server=(local)\SQLEXPRESS;Database=MyDB;Integrated Security=True;Connect Timeout=0" 
$conn.ConnectionString=$ConnectionString 
$conn.Open() 

$fileToGetContent = 'D:\my_batch.sql' 
$commandText = Get-Content -Path $fileToGetContent 

$command = $conn.CreateCommand() 
$command.CommandText = $commandText 
$command.ExecuteNonQuery() 

$conn.Close() 

Dann einen Zeitplan Aufgabe erstellen. Sie können es manuell machen (here ist ein gutes Beispiel) oder über Powershell (I bevorzugen diese Art und Weise):

#Create a new trigger that is configured to trigger at startup 
$STTrigger = New-ScheduledTaskTrigger -Daily -At 00:01 

#Name for the scheduled task 
$STName = "Run SQL batch" 

#Action to run as 
$STAction = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "D:\my_batch.ps1" 

#Configure when to stop the task and how long it can run for. In this example it does not stop on idle and uses the maximum possible duration by setting a timelimit of 0 
$STSettings = New-ScheduledTaskSettingsSet -DontStopOnIdleEnd -ExecutionTimeLimit ([TimeSpan]::Zero) 

#Configure the principal to use for the scheduled task and the level to run as 
$STPrincipal = New-ScheduledTaskPrincipal -User "DOMAIN\user" -RunLevel "Highest" 

#Register the new scheduled task 
Register-ScheduledTask $STName -Action $STAction -Trigger $STTrigger -Principal $STPrincipal -Settings $STSettings