2014-04-10 56 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

相关问题