Script som automatiskt uppdaterar i en databas

Permalänk

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.

Visa signatur

[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]

Permalänk
Medlem
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?

Visa signatur

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

Permalänk
Skrivet av freddyfresh:

Vilken databas sitter du i?

MSSQL

Visa signatur

[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]

Permalänk
Medlem

Ä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?

Permalänk
Medlem

triggers finns väl i MSSQL?

Permalänk
Medlem

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

Permalänk
Medlem

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

Visa signatur

~. Citera så jag hittar tillbaka .~

Permalänk
Medlem

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"?

Visa signatur

Grubblare

Permalänk
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'

Visa signatur

[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]

Permalänk
Medlem
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)

Permalänk
Medlem

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

Visa signatur

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

Permalänk

@kyuw:

Tack!
Ska kika på det du skriver!

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

Visa signatur

[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]

Permalänk
Medlem

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

Permalänk
Avstängd

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.