如何将TimeSpan添加到SQL Server中的时间列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将TimeSpan添加到SQL Server中的时间列相关的知识,希望对你有一定的参考价值。

我想做类似以下的事情:

update AutoTagUse set TimeActive = (TimeActive + @OrigTimeActive) where AutoTagUseId = @AutoTagUseId

其中TimeActive是SQL Server中的TIME(0)列,OrigTimeActiveTimeSpan变量(在C#中)。

我正在尝试这样做,所以我可以有多个服务同时在数据库中更新这个值,而不必用事务锁定。

用于创建列的SQL Server条目是:

[TimeActive] TIME (0)       
    CONSTRAINT [DF_AutoTagUse_TimeActive] DEFAULT ('00:00:00') NOT NULL,

我现在正在尝试的是:

TimeSpan difference = TimeActive - origTimeActive;
conn.ExecuteScalar("update AutoTagUse set TimeActive = dateadd(SECOND, @OrigTimeActive, TimeActive) where AutoTagUseId = @AutoTagUseId", 
                        new { AutoTagUseId = AutoTagUseId, OrigTimeActive = difference }, transaction);

我得到了:

System.Data.SqlClient.SqlException 的HResult = 0x80131904 Message =参数数据类型时间对于dateadd函数的参数2无效。 Source = .Net SqlClient数据提供程序

堆栈跟踪: 在Dapper.SqlMapper.ExecuteScalarImpl [T](IDbConnection cnn,CommandDefinition&command) 在Dapper.SqlMapper.ExecuteScalar(IDbConnection cnn,String sql,Object param,IDbTransaction transaction,Nullable1 commandTimeout, Nullable1 commandType) 在C: git Store LicenseLibrary DataObjects AutoTagUse.cs中的LicenseLibrary.DataObjects.AutoTagUse.Update(IDbConnection conn,IDbTransaction事务):第171行 在C: git Store TestLibrary DataObjects TestAutoTagUse.cs中的TestLibrary.DataObjects.TestAutoTagUse。<> c.b__2_0(IDbConnection conn):第59行 在LicenseLibrary.Database.AzureDataAccess。<> c__DisplayClass11_0.b__0()在C: git Store LicenseLibrary Database AzureDataAccess.cs:第104行 在Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.RetryPolicy。<> c__DisplayClass1.b__0() 在Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.RetryPolicy.ExecuteAction [TResult](Func`1 func)

答案

作为时间(0),我假设你的间隔是秒

你可以使用DATEADD()

Update AutoTagUse 
   set TimeActive = dateadd(SECOND,@OrigTimeActive,TimeActive) 
 Where AutoTagUseId = @AutoTagUseId
另一答案

通常,如果您想要存储时间跨度,则SQL Server中的time数据类型不适合。因为它专为存储一天中的时间而设计,而不是时间跨度。这意味着不支持将这些值中的两个加在一起(将4pm和8pm加在一起没有意义)。它也不支持超过24小时的负值或值。

由于所有这些原因,我通常建议使用数字数据类型,并在其预期单位的名称中给出明确的指示。 (我通常更喜欢所需的最小粒度的int类型,其他人可能选择使用某种类型的decimal

例如。我在这里使用SecondsActive int作为专栏。

以上是关于如何将TimeSpan添加到SQL Server中的时间列的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 LINQ 将 TimeSpan 计算转换为 SQL

如何将标识属性添加到 SQL Server 中的现有列

SQL Server - 如何将带有组小计的列添加到查询结果中

如何将我的 excel gridview 添加到我的 aspxgridview 并保存在 sql server 中?

sql server如何将字段添加到第一列

如何将架构绑定添加到 SQL Server 2008 中的视图