Sql server 2005 SQL Server 2005默认值函数与名为函数的INSERT语句

Sql server 2005 SQL Server 2005默认值函数与名为函数的INSERT语句,sql-server-2005,Sql Server 2005,这个问题只是为了我个人将来的知识,因为它所应用的数据库已经朝着一个特定的方向发展 在SQLServer2005数据库中,我们有一个函数,它根据Utc时间和本地客户端的时区返回DateTime值。此功能以两种方式应用: 作为列的默认值中的函数调用 作为各种存储过程中INSERT语句中的函数调用 显然,第一种方法更容易预先实现,并且可以说,在开发工作方面更具可扩展性 我的问题是,就服务器上的工作负载/完成事务的时间而言,使用一种方法比使用另一种方法在效率方面是否有显著优势。我希望这个问题不要太模糊。

这个问题只是为了我个人将来的知识,因为它所应用的数据库已经朝着一个特定的方向发展

在SQLServer2005数据库中,我们有一个函数,它根据Utc时间和本地客户端的时区返回DateTime值。此功能以两种方式应用:

  • 作为列的默认值中的函数调用
  • 作为各种存储过程中INSERT语句中的函数调用
  • 显然,第一种方法更容易预先实现,并且可以说,在开发工作方面更具可扩展性


    我的问题是,就服务器上的工作负载/完成事务的时间而言,使用一种方法比使用另一种方法在效率方面是否有显著优势。我希望这个问题不要太模糊。感谢您提前提供的任何见解。

    无论函数位于何处,都必须每行每列对其进行评估


    从维护的角度来看,将其作为默认设置要容易得多。假设您必须将其替换为新版本:在一个位置更改或在多个位置更改?

    如果它是默认值,则将精确计算一次。如果它是存储的proc to do inserts的一部分,则只计算一次。如果计算是在执行select的proc上完成的(我知道你不是在建议这个,但未来的读者可能会考虑),它将被重新计算很多次

    如果是默认值,则可以确保无论数据如何输入数据库,都将始终填充该值。如果在其他数据更改时需要更新某些内容,那么触发器将使其保持最新,无论数据如何更改。如果多个存储的进程可能被写入以执行相同的操作(不同的应用程序可能会调用该操作),那么使用不同的方法填充字段的风险就更大。此外,您还面临着从查询窗口、脚本、导入等在插入过程之外输入数据的风险。如果您可能需要从另一个系统或新客户端移植大量数据,并且通过插入过程一次运行一条记录的速度太慢,则尤其如此

    我认为默认函数(如果出于任何原因需要更新日期,那么它是一个触发器)是最容易维护的,也是最不可能对数据完整性产生负面影响的方法。执行插入的速度可能与存储过程一样快,并且远优于在选择而不是插入时执行计算的存储过程