2015-04-08 38 views
0

嗨,這個有點奇怪,所以裸露在我身邊。時間變化的Sqlserver手錶

我在SQL Server 2005中有一個表名爲lock,它將鎖定用戶對其數據進行更改,這個鎖可以在我設計的整個應用程序的各個點上激活,但是我有另一列意味着截止日期,基本上可以在兩個日期之間更改數據。開始日期是管理員決定向所有人開放的時間。我想知道,而不是使用工作,或者服務是否有辦法讓sql server檢查它的時間與日期時間的切割,並標記標誌自動鎖定。幾乎就像一個用於sql服務器的文件系統監視器,考慮到我將有不少截止日期不同的記錄。

非常感謝您的全力幫助,我認爲如果可以做到這一點,我認爲它會有用。

回答

0

您必須使用SQL Server作業或Windows服務創建一個作業,以使用現有模式執行作業。

如果您可以更改表格結構,則可以在表格中添加Computed列,該列將根據現有鎖定和基於截止日期邏輯鎖定行。您將無法使用index這個新的計算列,因爲它使用GETDATE()。要了解更多關於計算列的信息,可以參考here

在這個模式,你將不得不

  1. 更新手動鎖定
  2. 是指新的鎖定列檢查,如果連續被鎖定

要創建初始鎖列計算列,你可以嘗試這樣的事情。

CREATE TABLE data 
(
    dataid int identity(1,1) primary key, 
    value VARCHAR(30), 
    startdate date, 
    cutoffdate date, 
    old_lock bit, 
    lock as (CASE WHEN (cutoffdate <= GETDATE()) OR old_lock = 1 THEN 1 ELSE 0 END) 
) 

INSERT INTO data values('row lock by manual lock','2010-01-01','2099-01-01',1), 
('row lock by auto lock','2010-01-01','2010-01-02',0), 
('row unlocked','2010-01-01','2099-01-01',0), 
('row locked','2010-01-01','2011-01-01',1) 

SELECT * FROM data; 
+0

嗨,謝謝,不知道爲什麼我沒有想到計算列,會嘗試 –