2010-03-03 16 views
0

我有一個表,tblClient,其中存儲出生客戶的日期型日期時間,DOB的現場監測計算的數據(一個人的年齡)。在SQL Server

目標這裏是,當一個客戶端達到65歲(需要計算通過DOB),我需要插入一個新的記錄到另一個表。

但是由於數據庫事務(INSERT,UPDATE,DELETE)的原因,客戶端的時間不會改變,所以觸發器是沒有問題的。

什麼是一個好主意,montior這樣的變化?

+0

執行檢查並採取適當操作的週期性預定作業(例如存儲過程)。 – 2010-03-03 14:47:44

+0

@mjv:Mitch的評論顯示在我發佈我的之前。讓我擺脫它。 – Sung 2010-03-03 14:57:11

回答

2

創建每天或每小時運行的SQL代理工作,會做這個計算與T-SQL,然後如果有人達到65它會做插入

1

運行一個存儲計劃的任務或SQL Server維護計劃程序,並根據需要更新所需的行。

1

怎麼樣使用SSIS與檢查,如果它發生在一個存儲過程在夜間作業,他們是65進入一個新的行中的表?

+2

爲什麼SSIS可以使用SQL代理作業中的T-SQL? – SQLMenace 2010-03-03 14:49:15

+0

@SQLMenace - 調度服務有什麼不同? – DVK 2010-03-03 14:51:24

+0

如果你現在使用SSIS你也需要部署這個包並且對於我們所知道的他甚至不使用SSIS – SQLMenace 2010-03-03 14:58:46

2

儘可能保持SQL Server的獨立性 - 定期執行存儲過程的SQL Server代理作業應該很好地完成。

1

您可以使用SQL Server Management Studio中爲這個數據庫中創建一個SQL Server代理作業:

http://www.databasedesign-resource.com/sql-server-jobs.html

建立一個日常工作,無論你需要將其命名或。

只要數據庫啓動並運行,JOB就會根據您設置的計劃(從數據庫中)運行。

1

我會提出另一種方法 - 每次DOB被更新(或增加)的時間,從現在開始計算週期運行的東西,直到第一人達到65。然後(重新)安排一個作業在運行時間。

而且,我不能相信你需要插入該行到達65秒,所以,計算今天的新65年年輕人似乎不夠好一次的一天程序?

+0

現在每天運行的聲音足夠合理我現在想起它...感謝Paul, – Sung 2010-03-03 14:56:38

1

65歲的新領域怎麼樣?在記錄插入時計算一次,然後你可以查詢你的心在這個領域的內容。你需要這樣做是一個觸發器(並且考慮到了更新,它們對於DOB字段是罕見的,但是當它們錯誤輸入時可能)。現在我想到了一些,一個計算出來的文件可能會起作用而不是觸發器。

然後運行一項日常工作,以抓住自上次作業成功運行後轉爲65的任何人。請務必處理這個問題,以便如果某一天工作失敗,那麼來自該daty的人將會在下一次運行中被選中。

之所以我認爲這是每天計算每個人的年齡inyour數據庫是這樣的一個計算,真正只需要進行一次資源的浪費。當你有100人時沒什麼大不了的,當你有一百萬人時是個大問題。爲了確定你需要的三個是痛苦的,這樣做可能會對一百萬條記錄產生影響。在數據輸入時做一次,並不是那麼糟糕。

+0

不確定我看到計算一個日期爲65年前的日期,每天晚上一次,然後查詢任何等於該日期的DOB或您的建議:age65date = getdate()?索引DOB效果更好。 – JeffO 2010-03-03 18:54:40

+0

不同之處在於插入時執行一次計算並且每天執行一次計算(當人將要轉向65的日期通常不是一個變化的數字),尤其是在大型數據集上。當他們不必要時重複進行這種計算是無效的。爲什麼浪費服務器資源每天都在做同樣的工作? – HLGEM 2010-03-03 19:35:10