Script som automatiskt uppdaterar i en databas

Trädvy Permalänk
Medlem
Plats
127.0.0.1
Registrerad
Jun 2016

Script som automatiskt uppdaterar i en databas

Hej!

Jag sitter med en databas och ska försöka förklara detta enkelt.

I tabellen finns dessa kolumner:

int PK | assignmentID dateTime | assignmentDate dateTime | assignmentTime bool/boolean | assignmentComplete

När uppdragDate och uppdragTime är uppnådda, så skall uppdragComplete bli true.

Hur gör man enklast för att detta ska ske automatiskt?
Jag har tillgång till Linux och Windows servrar och sidan är byggd i asp.net och c# och ligger hostad i Azure.

[ASUS X99-DELUXE] - [i7 5960X] - [48 GB Corsair Dominator Platinum] - [ASUS ROG 780TI] - [ Kingston HyperX Predator 480GB PCI-E ] - [ 12TB 4x3TB WD RED SERIES ] - [Some SSD ~1TB] - [ASUS ROG PG278Q] - [Corsair AX1200i] - [Corsair Hydro Series H115i]

Trädvy Permalänk
Medlem
Plats
127.0.0.1
Registrerad
Apr 2010
Skrivet av carbonprogrammer:

Hej!

Jag sitter med en databas och ska försöka förklara detta enkelt.

I tabellen finns dessa kolumner:

int PK | assignmentID dateTime | assignmentDate dateTime | assignmentTime bool/boolean | assignmentComplete

När uppdragDate och uppdragTime är uppnådda, så skall uppdragComplete bli true.

Hur gör man enklast för att detta ska ske automatiskt?
Jag har tillgång till Linux och Windows servrar och sidan är byggd i asp.net och c# och ligger hostad i Azure.

Vilken databas sitter du i?

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Trädvy Permalänk
Medlem
Plats
127.0.0.1
Registrerad
Jun 2016
Skrivet av freddyfresh:

Vilken databas sitter du i?

MSSQL

[ASUS X99-DELUXE] - [i7 5960X] - [48 GB Corsair Dominator Platinum] - [ASUS ROG 780TI] - [ Kingston HyperX Predator 480GB PCI-E ] - [ 12TB 4x3TB WD RED SERIES ] - [Some SSD ~1TB] - [ASUS ROG PG278Q] - [Corsair AX1200i] - [Corsair Hydro Series H115i]

Trädvy Permalänk
Medlem
Plats
Umeå -> Nordmaling
Registrerad
Jul 2007

Är inte det lättaste att köra curl via cron, något i stil med if true -> set assignmentComplete? Har linux tillgång till databasen? Annars besöker du ett script hostad på en server med DB-access mha en key/lösenord du skickar via GET som sköter uppdateringen.

Eller har jag missat något?

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Maj 2007

triggers finns väl i MSSQL?

Trädvy Permalänk
Medlem
Registrerad
Nov 2016

Förstår inte riktigt hur man automatiskt ska veta om det är färdigt eller inte, menar du om tiden passerats ?

Isåfall eftersom allt ligger i en och samma tabell gör assignmentComplete som en computed column som returnerar 1 om nuvarande tid är > än assignmentDate och assignmentTime annars returnera 0

Trädvy Permalänk
Medlem
Plats
Bålsta
Registrerad
Nov 2010

Gör ett enkelt SQL script som kollar och ev. uppdaterar din rader.

Sen schemalägger du det med MS SQL Server Agents. Då kan du köra scriptet på din tabell på ett satt interval!

https://msdn.microsoft.com/en-us/library/ms190268.aspx#Anchor...

edit: Ändrade länken

~. Citera så jag hittar tillbaka .~

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Mar 2015

Kan man inte bara göra om kolumnen till en computed och slänga in typ "om dom här två kolumnerna inte är NULL, då är assignmentComplete = 1, annars är det 0"?

I'm not having a glass of wine, I'm having six! It's called a tasting and it's classy!

Trädvy Permalänk
Medlem
Plats
127.0.0.1
Registrerad
Jun 2016
Skrivet av kyuw:

Förstår inte riktigt hur man automatiskt ska veta om det är färdigt eller inte, menar du om tiden passerats ?

Isåfall eftersom allt ligger i en och samma tabell gör assignmentComplete som en computed column som returnerar 1 om nuvarande tid är > än assignmentDate och assignmentTime annars returnera 0

exakt, har tiden passerat, så ska uppdraget stå som klart.
Med andra ord: assignmentComplete = 'true'

[ASUS X99-DELUXE] - [i7 5960X] - [48 GB Corsair Dominator Platinum] - [ASUS ROG 780TI] - [ Kingston HyperX Predator 480GB PCI-E ] - [ 12TB 4x3TB WD RED SERIES ] - [Some SSD ~1TB] - [ASUS ROG PG278Q] - [Corsair AX1200i] - [Corsair Hydro Series H115i]

Trädvy Permalänk
Medlem
Registrerad
Nov 2016
Skrivet av carbonprogrammer:

exakt, har tiden passerat, så ska uppdraget stå som klart.
Med andra ord: assignmentComplete = 'true'

ALTER TABLE dbo.TableName DROP COLUMN assignmentComplete ;
GO
ALTER TABLE dbo.TableName ADD assignmentComplete
AS (case when getdate()>[assignmentDate] then (1) else (0) end)

Varje gång du kör en select kommer den kolla om datum passerats och returnera 0 om inte passerat, 1 om det är passerat. Det finns ingen bool i MSSQL server utan det är ett BIT värde. (Både ADO.NET och Entity Framework gör om BIT till bool och tvärtom)

Trädvy Permalänk
Medlem
Plats
Götet
Registrerad
Okt 2013

Fast nog borde lösningen ligga i programmet som skapar datan och inte i databasen? Maintainabilitys mardröm är logik i db och integrationsplattform

Skickades från m.sweclockers.com

Processor: Motorola 68000 | Klockfrekvens: 7,09 Mhz (PAL) | Minne: 256 kB ROM / 512 kB RAM | Bussbredd: 24 bit | Joystick: Tac2 | Operativsystem: Amiga OS 1.3

Trädvy Permalänk
Medlem
Plats
127.0.0.1
Registrerad
Jun 2016

@kyuw:

Tack!
Ska kika på det du skriver!

Låter precis som den lösningen jag letar efter.

[ASUS X99-DELUXE] - [i7 5960X] - [48 GB Corsair Dominator Platinum] - [ASUS ROG 780TI] - [ Kingston HyperX Predator 480GB PCI-E ] - [ 12TB 4x3TB WD RED SERIES ] - [Some SSD ~1TB] - [ASUS ROG PG278Q] - [Corsair AX1200i] - [Corsair Hydro Series H115i]

Trädvy Permalänk
Medlem
Plats
Härnösand
Registrerad
Jan 2016

Lägga till data i SQL krävs SQL INSERT du kan läsa mer om det på
http://www.w3schools.com/sql/sql_insert.asp

Sedan läser du datan från databasen med MSQL ska du hämta från 2 tabeller så skulle jag rekomdera JOIN
http://www.w3schools.com/sql/sql_join.asp

3 eller 4 tabeller med data så kör du med JOIN, LEFT JOINE och så vidare för kunna hämta tabeller och data från dessa i en och samma SQL fråga och ska du hämta ut specefikt mellan typ en viss ålder 17-24 så kör man BEETWEEN
http://www.w3schools.com/sql/sql_between.asp

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jun 2010

Som andra säger så rekommenderar jag att du gör detta i koden, men det är klart att det går att göra i DB också. Som kyuw säger exempelvis, eller som en trigger:

CREATE TRIGGER minTrigger ON minTabell FOR UPDATE, INSERT AS SET assignmentComplete = 1 WHERE assignmentDate + assignmentTime > GETDATE()

Jag vet inte varför du har datum och tid i separata kolumner dock, om de är DATETIME så innehåller de både och.