Bri*_*ian 4 sql t-sql sql-server-2012 sql-server-2012-express
SQL Server 2012本身是否可以自动计算列?
例如:我有三列START_DATE,END_DATE和DURATION.
我希望通过这样做获得持续时间:
DURATION = END_DATE - START_DATE
Run Code Online (Sandbox Code Playgroud)
所以我得到了天数的持续时间.
SQL Server 2012是否可以在创建记录时自动执行此操作?
是的,确定 - 只需定义Duration为计算列:
ALTER TABLE dbo.YourTable
ADD Duration AS DATEDIFF(DAY, START_DATE, END_DATE) PERSISTED
Run Code Online (Sandbox Code Playgroud)
然后你走吧 现在Duration将始终显示这两个其他列之间的差异(以天为单位).如果使用PERSISTED关键字,则计算的值将与其他列值一起存储.如果两个"依赖"列中的任何一个列也发生更改,则会更新此列.
更新:如果您想了解日期和今天之间的差异,您可以使用
ALTER TABLE dbo.YourTable
ADD Duration AS DATEDIFF(DAY, START_DATE, GETDATE())
Run Code Online (Sandbox Code Playgroud)
但不幸的是,由于GETDATE()函数是非确定性的(毕竟 - 每次调用它时它的返回值都会改变),你不能使用PERSISTED关键字.这意味着:每次访问该列(询问其值)时,将再次进行计算.