Benutzer mit den meisten Antworten
Automastische Prozedur, die um Mitternacht ausgelöst wird.

Frage
-
Hallo in die Runde!
In einer Datenbank erfasse ich Maschinendaten verschiedenster Art, die von den Mitarbeitern eingegeben werden. Bei Ereignisauslösung wird in dbo.Ereignisse eine Neue Zeile angelegt und in der Spalte "Start" der Timestamp geschrieben. Gleichzeitig wird das letzte Ereignis der entsprechenden Maschine (FK_id_Maschine) herausgesucht und dort der Timestamp in der Spalte "Ende" eingetragen.
Jetzt möchte ich aber, dass der Server um Mitternacht automatisch diese Tabelle durchläuft und nach noch offenen "Ende"-Zellen sucht und diese mit der Zeit aus der Spalte "Schichtende" auffüllt. Im SQL Server Management Studio gibt es ja sowas wie "Gespeicherte Prozeduren". Wie funktionieren diese?
Anbei die Tabellenscripte zum ausprobieren.
VIELEN DANK!
Manu----------------------------------------------------------------------------------------------------------------------
Tabelle
USE [tempdb] GO /****** Object: Table [dbo].[Ereignisse] Script Date: 11.05.2017 09:44:39 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Ereignisse]( [Id] [int] IDENTITY(1,1) NOT NULL, [Datum] [date] NOT NULL CONSTRAINT [DF_Maschinenzeiten_Laufzeit] DEFAULT ('00:00:00'), [Start] [datetime2](7) NOT NULL CONSTRAINT [DF_Maschinenzeiten_Stillstand] DEFAULT (NULL), [Ende] [datetime2](7) NULL, [Menge] [int] NULL, [Ausschuss] [int] NULL, [Produktion] [bit] NOT NULL CONSTRAINT [DF_Maschinenzeiten_Produktion] DEFAULT ((0)), [Schichtstart] [time](0) NULL, [Schichtende] [time](0) NOT NULL, [FK_id_Maschine] [int] NOT NULL, [FK_id_Betriebsauftrag] [int] NOT NULL, [FK_id_Arbeitsgang] [int] NOT NULL, [FK_id_Stillstandsgrund] [int] NULL, [FK_id_Mitarbeiter] [int] NULL, CONSTRAINT [PK_Maschinenzeiten] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[Ereignisse] SET (LOCK_ESCALATION = AUTO) GO ALTER TABLE [dbo].[Ereignisse] WITH CHECK ADD CONSTRAINT [Arbeitsgänge_Ereignisse] FOREIGN KEY([FK_id_Arbeitsgang]) REFERENCES [dbo].[Arbeitsgänge] ([ID]) GO ALTER TABLE [dbo].[Ereignisse] CHECK CONSTRAINT [Arbeitsgänge_Ereignisse] GO ALTER TABLE [dbo].[Ereignisse] WITH CHECK ADD CONSTRAINT [Betriebsauftraege_Ereignisse] FOREIGN KEY([FK_id_Betriebsauftrag]) REFERENCES [dbo].[Betriebsaufträge] ([Id]) GO ALTER TABLE [dbo].[Ereignisse] CHECK CONSTRAINT [Betriebsauftraege_Ereignisse] GO ALTER TABLE [dbo].[Ereignisse] WITH CHECK ADD CONSTRAINT [Maschine_Ereignisse] FOREIGN KEY([FK_id_Maschine]) REFERENCES [dbo].[Maschinen] ([Id]) GO ALTER TABLE [dbo].[Ereignisse] CHECK CONSTRAINT [Maschine_Ereignisse] GO ALTER TABLE [dbo].[Ereignisse] WITH CHECK ADD CONSTRAINT [Mitarbeiter_Ereignisse] FOREIGN KEY([FK_id_Mitarbeiter]) REFERENCES [dbo].[Mitarbeiter] ([Id_MA]) GO ALTER TABLE [dbo].[Ereignisse] CHECK CONSTRAINT [Mitarbeiter_Ereignisse] GO ALTER TABLE [dbo].[Ereignisse] WITH CHECK ADD CONSTRAINT [Stillstandsgrund_Ereignisse] FOREIGN KEY([FK_id_Stillstandsgrund]) REFERENCES [dbo].[Stillstandsgründe] ([Id]) GO ALTER TABLE [dbo].[Ereignisse] CHECK CONSTRAINT [Stillstandsgrund_Ereignisse] GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'rrrr' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Ereignisse', @level2type=N'CONSTRAINT',@level2name=N'Stillstandsgrund_Ereignisse' GO
Insert für Daten
USE [tempdb] GO INSERT INTO [dbo].[Ereignisse] ([Datum] ,[Start] ,[Ende] ,[Menge] ,[Ausschuss] ,[Produktion] ,[Schichtstart] ,[Schichtende] ,[FK_id_Maschine] ,[FK_id_Betriebsauftrag] ,[FK_id_Arbeitsgang] ,[FK_id_Stillstandsgrund]) VALUES (<Datum, date,> ,<Start, datetime2(7),> ,<Ende, datetime2(7),> ,<Menge, int,> ,<Ausschuss, int,> ,<Produktion, bit,> ,<Schichtstart, time(0),> ,<Schichtende, time(0),> ,<FK_id_Maschine, int,> ,<FK_id_Betriebsauftrag, int,> ,<FK_id_Arbeitsgang, int,> ,<FK_id_Stillstandsgrund, int,>) GO
Antworten
-
Hallo Manu,
du kannst entweder dein Skript direkt in den Skriptblock der Powershell einbetten und dann ausführen lassen. Eine Beschreibung mit einer ähnlichen Aufgabenstellungen habe ich hier beschrieben.
https://www.faq-o-matic.net/2017/01/09/sql-server-express-datensicherung-ber-powershell/
Wenn du eine gespeicherte Prozedur erstellen willst dann findest du entsprechende Anleitungen unter
https://technet.microsoft.com/de-de/library/ms190669(v=sql.105).aspx
diese Prozedur könntest du dann über die Powershell starten lassen
Ich hoffe mal dass es etwas klarer geworden ist.
Benjamin Hoch
MCSE: Data Platform & Data Management and Analytics
MCSA: SQL Server 2012/2014 & 2016 DB Administration
MCSA: Windows Server 2012- Als Antwort vorgeschlagen Benjamin.Hoch Mittwoch, 17. Mai 2017 06:00
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 30. Mai 2017 14:21
Alle Antworten
-
Hallo Manu
Da der Express keinen Agent hat, kannst du den Windows Aufgabenplaner nutzen und eine Aufgabe erstellen welche einen Powershell Befehl absetzt nach dem Muster.
Invoke-Sqlcmd -Query "exec meineSP" -ServerInstance "MyComputer\MyInstance"
Benjamin Hoch
MCSE: Data Platform & Data Management and Analytics
MCSA: SQL Server 2012/2014 & 2016 DB Administration
MCSA: Windows Server 2012 -
-
Hallo Manu,
du kannst entweder dein Skript direkt in den Skriptblock der Powershell einbetten und dann ausführen lassen. Eine Beschreibung mit einer ähnlichen Aufgabenstellungen habe ich hier beschrieben.
https://www.faq-o-matic.net/2017/01/09/sql-server-express-datensicherung-ber-powershell/
Wenn du eine gespeicherte Prozedur erstellen willst dann findest du entsprechende Anleitungen unter
https://technet.microsoft.com/de-de/library/ms190669(v=sql.105).aspx
diese Prozedur könntest du dann über die Powershell starten lassen
Ich hoffe mal dass es etwas klarer geworden ist.
Benjamin Hoch
MCSE: Data Platform & Data Management and Analytics
MCSA: SQL Server 2012/2014 & 2016 DB Administration
MCSA: Windows Server 2012- Als Antwort vorgeschlagen Benjamin.Hoch Mittwoch, 17. Mai 2017 06:00
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 30. Mai 2017 14:21