2014-04-10 94 views
0

我有一個表如何使用功能在存儲過程中的SQL Server 2008

UserTime 
(
    UserTimeId(pk) 
    ,DAY 
    ,Date 
    ,CheckIn 
    ,CheckOut 
    ,HOURS 
) 

上運行時,當我點擊CheckIn按鈕,把它插入當前時間

ALTER procedure [dbo].[InsertCheckIn] 
    @UserID INT, 
    @Day varchar(50), 
    @Date nvarchar(50), 
    @CheckIn nvarchar (50) 
as 
begin 
    insert into UserTime (Userid, [Day], Date, CheckIn) 
    values (@UserID, @Day, @Date, @CheckIn) 
end 

,並在結賬時,我插入當前時間。

ALTER procedure [dbo].[UpdateCheckOut] 
    @UserID INT, 
    @Day varchar(50), 
    @Date nvarchar(50), 
    @CheckOut nvarchar (50) 
as 
begin 
    update UserTime 
    set UserId = @UserID 
     ,[Day] = @Day 
     ,[Date] = @Date 
     ,CheckOut = @CheckOut 
    from UserTime 
    where UserId = @UserId 
end 

我有一個函數

DATEADD(SECOND, - DATEDIFF(SECOND, @CheckOut, @CheckIn), @HoursWorked) 

是需要存儲的時間值的差異。

我想在Hours欄中存儲此差異。

當我插入CheckIn - >存儲當前時間。 關於CheckOut,我想存儲那個時間以及Hours的區別。

我如何能實現呢?

+0

添加一些示例數據。 –

+0

對不起,說你的數據類型亂七八糟,你不能在'nvarchar(50)'值上使用'DATEDIFF()'函數。您需要使用適當的數據類型。例如對日期列使用DATE數據類型,並且不要將SQL Server關鍵字用於列名。您在您的過程中使用了UserID列,因爲它似乎不存在於您的表模式中。 –

+0

@Serpiton我對此很陌生。你能舉一個如何做到這一點的例子嗎? – user2525244

回答

1

一些建議和提示,你的表設計需要一些認真的關注,我建議你應該只有三列保存所有你試圖存儲在多個不同的字段中的錯誤數據類型的信息。

CREATE TABLE UserTime 
(
UserTimeId INT NOT NULL PRIMARY KEY 
,CheckIn DATETIME DEFAULT GETDATE() 
,CheckOut DATETIME 
) 
GO 

現在有以下存儲過程來插入一個條目,檢入時間將默認獲取當前日期時間。

ALTER procedure [dbo].[InsertCheckIn] 
@UserTimeId INT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    insert into UserTime (UserTimeId) 
    values (@UserTimeId) 

END 

現在當這個人離開下面的存儲過程只能檢出用戶ID和DATETIME結帳。

ALTER procedure [dbo].[UpdateCheckOut] 
@UserTimeId INT, 
@CheckOut DATETIME = NULL --<-- If no value is provided it will 
AS         -- set it to current datetime here is set 
BEGIN        -- to default NULL 
    SET NOCOUNT ON; 
    IF (@CheckOut IS NULL) 
     BEGIN 
     SET @CheckOut = GETDATE(); - 
     END 

    UPDATE UserTime 
    SET CheckOut  = @CheckOut 
    WHERE UserTimeId = @UserTimeId 
END 

注意

你想在一列存儲的其他計算值,你應該避免和編寫一個查詢其在需要時在運行時獲取的價值。

+0

我更新了表格和存儲過程。現在如何利用這個功能? DATEADD(SECOND, - DATEDIFF(SECOND,@CheckOut,@CheckIn),@HoursWorked) – user2525244

相關問題