是否可以在时间i后自动更改表格中的数据 假设时间i = 10秒。 表t,列x1,x2,x3 x3是boolean as datatype。
将x3为假现在假设我将t.x3(任意行)中的值更改为True,然后在10秒后将其自身更改为False。
有可能。?通过一些触发器或光标或程序或什么?
Alteast需要一个关键字来谷歌。
谢谢!
答案 0 :(得分:2)
您可以在没有触发器的情况下执行此操作。只需使用计算列。
例如:
create table t (dte datetime,
flag as (case when dte < dateadd(second, -10, getdate()) then 0 else 1
end)
);
这是一个计算列。它会在查询时重新计算,进行您要求的计算。
答案 1 :(得分:1)
您要求看起来像反模式的这种情况。存在等待随机时间(WAITFOR DELAY '00:00:02';
)的命令,但通常是is not a good idea to use it:
<强>小心+ 强>
包含WAITFOR会减慢SQL Server进程的完成速度,并可能导致应用程序中出现超时消息。如有必要,请在应用程序级别调整连接的超时设置。
在我看来,简单的方法是在桌面上创建一个视图并动态计算字段:
CREATE TABLE t ( PrimaryKey ....,
x3 bit,
t datetime default gettime(),
);
CREATE VIEW v as
SELECT PrimaryKey,
(CASE WHEN x3 = 1 and datediff(second, t, getdate()) > 10
THEN 1
ELSE 0
END ) as x3 --<-- lets supose this is your field.
FROM t;
然后,您可以从视图中选择以检查您的计算字段:
SELECT x3 FROM v; --<-- select from v instead from t.
您可以使用触发器在更改x3时保持t
字段最新:
CREATE TRIGGER updateModified
ON dbo.t
AFTER UPDATE
AS
UPDATE dbo.t
SET t = getdate()
FROM Inserted i
WHERE dbo.t.PrimaryKey = i.PrimaryKey
答案 2 :(得分:0)
您可以使用触发器在表格上发生变化后自动更新值。但是,在更新/插入/删除后直接执行触发器时,此更改将在几毫秒内受到影响。
您可以执行的第二种方法是创建一个计划的数据库作业,该作业将每10秒运行一次(在这种情况下)或任何特定的间隔,这将在所需的列中进行更新。
有关安排数据库作业的更多信息,请参阅此Article