2011-03-16 86 views
2

爲了完成這項任務,我應該研究什麼?如何自動運行SQL查詢?

我使用MS-SQL & VB.Net

我有一個存儲startdateenddate SQL表。我想每隔10分鐘在該表上運行一次查詢,以檢查enddate是否大於今天,如果是,我想添加1到另一列,如果不是,我想添加0.

我該如何做到這一點?

+0

讓我改述一下你的問題:你需要準確的SQL語句和每10分鐘循環的腳本嗎? – Raptor 2011-03-16 02:42:01

回答

1

你的問題似乎是你要求錯誤的東西。

這聽起來像你正在尋找一個觸發器來觸發並更新計算的字段。所以,它聽起來就像你要設置的表的數據庫觸發器和有觸發火上插入或更新

USE [<database_name>] 
GO 

/****** Object: Trigger [dbo].[tr_<tablename>_endDateCheck] Script Date: 03/16/2011 12:42:24 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TRIGGER [dbo].[tr_<tablename>_endDateCheck] 
    ON [dbo].[<tablename>] 
    AFTER INSERT,UPDATE 
AS 
    BEGIN 

     UPDATE [<tablename>] SET isEnded = CASE WHEN (SELECT endDate FROM inserted WHERE id = inserted.id).endDate > GetDate() THEN 1 ELSE 0 END WHERE id IN (SELECT ID FROM inserted) 

    END 
GO 

或者非常類似的東西這個反正

然後你把計劃的作業將運行0001小時,更新所有這一切不得不結束日期=昨天的日期

UPDATE [<tablename>] SET isEnded = 1 WHERE isEnded = 0 AND endDate BETWEEN DATEADD(DAY, -1, GETDATE()) AND GETDATE() 

編輯記錄:或者是結束日期實際上具體時間呢?

也許在這種情況下,你應該使用一個視圖與視圖定義選擇您的數據,而不是:

SELECT *, CASE WHEN endDate > GetDate() THEN 1 ELSE 0 END AS HasEnded 
FROM [<TableName>] 

EDIT2:修復了這是不是對於包括結束日期值正確的計劃作業時間價值

0

創建一個SQL Server job以運行更新查詢。

UPDATE YourTable 
    SET AnotherColumn = AnotherColumn + 1 
    WHERE enddate > DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0) /* Today's date at midnight */ 
+0

感謝您的回覆聽起來像這正是我需要感謝您的快速回復 – Michael 2011-03-16 02:53:20

+0

@邁克爾:很高興幫助。如果您發現這有幫助,請考慮通過點擊旁邊的複選標記來接受答案。 – 2011-03-16 02:55:00

0

你可以寫一個SQL作業,或者如果你想要寫一個服務於對數據庫運行,如果你在代碼更舒服或操作需要更廣泛的業務規則。

+0

感謝您的答案將查找SQL作業聽起來像它會從閱讀幾分鐘到它做什麼工作 – Michael 2011-03-16 02:51:51