求教各位大神幫忙 謝謝
create table member
VARCHAR name 姓名
VARCHAR gonghao 工號
DECIMAL njts 年假天數
DATETIME rzrq 入職日期
根據入職年限自動更新年假天數 10年以內5天 20年以內10天
uj5u.com熱心網友回復:
用視圖或者計算欄位uj5u.com熱心網友回復:
主要是不會啊uj5u.com熱心網友回復:
CREATE VIEW XXXXXXAS
SELECT NAME,GONGHAO,RZRQ,CASE WHEN DATEDIFF(YY,RZRQ,GETDATE())<10 THEN 5 ...... END NJTS
uj5u.com熱心網友回復:
這個一點都不難,看demo:
if exists(select null from sysobjects where name='funGetYearVal')
drop function funGetYearVal
go
create function funGetYearVal(@dateEntry datetime)
returns int
as
begin
declare @result int
select @result= datediff(month,convert(date,@dateEntry),getdate()) /12 --入職年份
return @result
end
--測驗
-- declare @dateEntry datetime = '2001-09-23 00:00:00:000'
-- select datediff(month,convert(date,@dateEntry),getdate()) /12 as yearEntry
--創建Table
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tb]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[tb]
go
create table tb(
sname varchar(20),
gonghao varchar(15),
rzrq datetime,
njts as (case when dbo.funGetYearVal(rzrq) <=10 then 5 when dbo.funGetYearVal(rzrq)>10 then 10 else 0 end)
)
--資料測驗
insert into tb(sname,gonghao,rzrq)
select '張三','101001','1999-10-11 00:00:00:000' union all
select '李四','1001002','2010-05-09 00:00:00:000'
select * from tb
輸出結果:
uj5u.com熱心網友回復:
萬分感謝,不過我這個沒辦法用這種方式,資料庫表是通過軟體自動創建,沒辦法使用這個公式只能想著通過觸發器去定時自動更新這個資料
uj5u.com熱心網友回復:
我對你表示無語。我寫的,你是看不懂呢,還是沒看。
這個年假天數,是在建這個資料表的時候,就產生。還是講這個入職日志是insert 插入的形式傳進來。
這個要搞清楚,應用場景如果是在建表的時候,就能返寫這個年假天數,那設計成計算公式列,就行。
如果有前端UI進行傳進來的,只是傳這一個值,那寫成觸發器也行,當然現在這種方法也一樣適用。
uj5u.com熱心網友回復:
當然看明白了 還是想要觸發器的形式的 我的資料庫表是通過應用軟體創建的 沒辦法通過你寫的方式去創建表uj5u.com熱心網友回復:
不用創建表能夠創建觸發器,應該也有權限去修改表結構了。
uj5u.com熱心網友回復:
表結構會寫在資料庫的表中,修改后會造成應用程式報錯uj5u.com熱心網友回復:
觸發器只能在表的資料變化時去更新,查詢時就對不上了,比如今天更新一個員工的資料時還是10年內的,到了明天可能就滿10年了,查詢出來已經不正確了。uj5u.com熱心網友回復:
估計是想要定時作業一類,每天執行一次更新uj5u.com熱心網友回復:
大佬思路清晰,正中要害。
它要的邏輯都沒明白,就一直想在觸發器上搞名堂。觸發器明顯,是因為某個值發生改變,而產生一個邏輯動作。
這個入職時間,是在什么時候產生的,我就搞不明白了。
因為入職日期是死的,只是在查詢這個年假時,才會計算出一個天數。
這個查詢是個動作而以,觸發器能管得了insert 、update 、delete,還能管得了select?
uj5u.com熱心網友回復:
觸發器不通用的。sql server ,oracle,mysql 都不一致的。
但是SQl 陳述句比較通用的。
uj5u.com熱心網友回復:
觸發器有insert ,update,delete觸發器,而你要的是定時觸發。這屬于、作業、計劃范圍了。。。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/269609.html
標籤:應用實例
上一篇:電子資料取證
下一篇:遠程訪問不了sqlserver
