Hej,
Har satt upp en liten intern supportdatabas för att mäta lite tid på våra supportärenden.
Jag vill att när fältet "sign" får ett värde (alltså någon av oss plockar ett öppet ärende) ska fältet "starttid" få datum/tidsstämpel.
Kan någon hjälpa mig med en trigger/lagrad procedur? Kommer även att lägga en sådan när ärendet blir avbockat, men det blir ju samma förfarande, fast andra fält.
Tackar!

Uppdatera fält med datum/tid
Skapad av
emoffster
, Oct 04 2010 23:26
2 svar i denna tråden
#1
Skriven 04 October 2010 - 23:26
#2
Skriven 04 October 2010 - 23:34
Funktionen du vill använda är getdate()
Den ger datum och tid. Jag har ett litet gulligt script som formaterar getdate() i alla möjliga och omöjliga format. Tex tidsdelen, datumdelen, etc etc. Bar kör det i SSMS så visar det dig en kolumn med hur datumet blir, och den andra ger select statement som ger det formatet. Låter krångligt men är busenkelt. I ditt fall finns andra lösningar, men om du vill göra det på sql nivå och inte GUI nivå fungerar detta. Det bör nämnas att du kan ha det direkt inbyggt i din tabell istället. som default värde i en kolumn. Skicka inte med data och default värdet sätts. Sedan kan du ha en update trigger som sätter en annan kolumn vid varje update. Och en flagga för när ärendet är slut. Då kan du räkna ut tiden. Men det blir gärna lite råddigt när man skall ta hänsyn till helger, arbetstider, dag före röd dag och helgdagar.
Skickar med scriptet som får dig på banan så att säga.
set nocount on
DECLARE @Date int
create table #temp
(
Type int,
date varchar(50),
Code Varchar(50)
)
set @Date=131
While @Date>=0
begin
if((@Date>=0 and @date<15) or (@Date>=20 and @date<26) or (@Date>=100 and @date<=114) or @Date in (120,121,126,130,131))
insert into #temp
select convert(varchar,@date),convert(varchar,getdate(),@Date),'SELECT convert(varchar,getdate(),' + cast(@Date as varchar) + ')'
set @Date=@Date-1
end
select * from #temp
drop table #Temp
SELECT
Cast(CONVERT(VARCHAR,getdate(),110) as datetime) AS 'Today 00:00' --No Formatting
,convert(varchar,dateadd(hh,18,Cast(CONVERT(VARCHAR,getdate(),110) as datetime)),20) AS 'Today 18:00' -- 20 = format YYYY-MM-DD HH:NN:SS
,convert(varchar,dateadd(hh,datepart(hh,getdate())+1,convert(varchar,getdate(),10)),20) as 'Now next hour on the hour'
Den ger datum och tid. Jag har ett litet gulligt script som formaterar getdate() i alla möjliga och omöjliga format. Tex tidsdelen, datumdelen, etc etc. Bar kör det i SSMS så visar det dig en kolumn med hur datumet blir, och den andra ger select statement som ger det formatet. Låter krångligt men är busenkelt. I ditt fall finns andra lösningar, men om du vill göra det på sql nivå och inte GUI nivå fungerar detta. Det bör nämnas att du kan ha det direkt inbyggt i din tabell istället. som default värde i en kolumn. Skicka inte med data och default värdet sätts. Sedan kan du ha en update trigger som sätter en annan kolumn vid varje update. Och en flagga för när ärendet är slut. Då kan du räkna ut tiden. Men det blir gärna lite råddigt när man skall ta hänsyn till helger, arbetstider, dag före röd dag och helgdagar.
Skickar med scriptet som får dig på banan så att säga.
set nocount on
DECLARE @Date int
create table #temp
(
Type int,
date varchar(50),
Code Varchar(50)
)
set @Date=131
While @Date>=0
begin
if((@Date>=0 and @date<15) or (@Date>=20 and @date<26) or (@Date>=100 and @date<=114) or @Date in (120,121,126,130,131))
insert into #temp
select convert(varchar,@date),convert(varchar,getdate(),@Date),'SELECT convert(varchar,getdate(),' + cast(@Date as varchar) + ')'
set @Date=@Date-1
end
select * from #temp
drop table #Temp
SELECT
Cast(CONVERT(VARCHAR,getdate(),110) as datetime) AS 'Today 00:00' --No Formatting
,convert(varchar,dateadd(hh,18,Cast(CONVERT(VARCHAR,getdate(),110) as datetime)),20) AS 'Today 18:00' -- 20 = format YYYY-MM-DD HH:NN:SS
,convert(varchar,dateadd(hh,datepart(hh,getdate())+1,convert(varchar,getdate(),10)),20) as 'Now next hour on the hour'
#3
Skriven 05 October 2010 - 00:19
använd inte trigger. Dålig design och det ger dålig prestanda. Använd en stored proc.
Designförslag. Skapa en tabell med bl a
ID identity (1,1),
created datetime default getdate(),
updated datetime default null,
caseclosed bit default 0
och alla andra kolumner du vill.
Vid insert utelämna ID, created, updated och caseclosed
skapa en storedproc som tar som parametrar
ID (för att hantera rätt record), caseclosed (så du vet om det är sista inmatningen) och alla andra kolumner du vill ha.
Kör sedan update
set updated = getdate()
set caseclosed = @caseclosed
set textnotering = textnotering + chr(10) + @adderadtext
where ID = @ID
Kör rakt ur huvudet, kan vara
set
updated = getdate(),
caseclosed = @caseclosed,
textnotering = textnotering + chr(10) + @adderadtext
where ID = @ID
eller ngt i den stilen. Men det är inte så svårt att lista ut. Med denna lösning får du created, updated och closed samt uppdaterat textfält.
Lycka till
Mårten
Designförslag. Skapa en tabell med bl a
ID identity (1,1),
created datetime default getdate(),
updated datetime default null,
caseclosed bit default 0
och alla andra kolumner du vill.
Vid insert utelämna ID, created, updated och caseclosed
skapa en storedproc som tar som parametrar
ID (för att hantera rätt record), caseclosed (så du vet om det är sista inmatningen) och alla andra kolumner du vill ha.
Kör sedan update
set updated = getdate()
set caseclosed = @caseclosed
set textnotering = textnotering + chr(10) + @adderadtext
where ID = @ID
Kör rakt ur huvudet, kan vara
set
updated = getdate(),
caseclosed = @caseclosed,
textnotering = textnotering + chr(10) + @adderadtext
where ID = @ID
eller ngt i den stilen. Men det är inte så svårt att lista ut. Med denna lösning får du created, updated och closed samt uppdaterat textfält.
Lycka till
Mårten