請問一個架構問題? |
尚未結案
|
huangeider
高階會員 ![]() ![]() ![]() ![]() 發表:288 回覆:492 積分:231 註冊:2003-02-26 發送簡訊給我 |
|
Mickey
版主 ![]() ![]() ![]() ![]() ![]() 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
huangeider 你好: 可考慮用 MSSQL 的 觸發器(Trigger), 如:
create trigger [TriggerName] on [TableName] for insert,update,delete as begin declare @ins_count int, @del_count int, ..... if @@rowcount = 0 return -- No Rows Effected select @ins_count=count(*) from inserted select @del_count=count(*) from deleted if @del_count=@ins_count begin -- Update end if @del_count=0 begin -- Insert end if @ins_count=0 begin -- Delete end end |
huangeider
高階會員 ![]() ![]() ![]() ![]() 發表:288 回覆:492 積分:231 註冊:2003-02-26 發送簡訊給我 |
請教可以把異動的資料另存一個檔嗎
因為小弟不只是要把異動的資料另存一個檔 而且還得把異動的資料
截取其record內某些欄位的資料 而另存在一個已建好的檔案
有可能直接用sql trigger做到嗎?
另寫程式行嗎?
目前小弟只知道可新建一個已select資料中的table
create table sales_staff as select employee_id, first, last_name, from l_employees where delp_code='sal';堅持從洗馬桶做起 Eric 發表人 - huangeider 於 2004/04/09 23:18:00 |
Mickey
版主 ![]() ![]() ![]() ![]() ![]() 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
引言: 請教可以把異動的資料另存一個檔嗎應該可以, 我手邊沒有 MSSQL, 試試看 : select * into [NewTable] from inserted -- 新增之資料 select * into [OldTable] from deleted -- 刪除之資料 不過須注意 實體 Table ([NewTable]/[OldTable]) 已存在的問題. 如果異動之資料量不大, 也可考慮用 暫存 Table (Temporary Table), 搜尋一下, 我記得本站已有一些討論. 引言:這...應該是 Oracle 的 PL/SQL 的語法, 與 Sybase / Mssql "select into" 語法異曲同工.create table sales_staff as select employee_id, first, last_name, from l_employees where delp_code='sal'; |
huangeider
高階會員 ![]() ![]() ![]() ![]() 發表:288 回覆:492 積分:231 註冊:2003-02-26 發送簡訊給我 |
create trigger [test] on [退庫單]
for insert,update,delete
as
begin
declare @ins_count int,
@del_count int,
if @@rowcount = 0 return
select @ins_count=count(*) from inserted
select @del_count=count(*) from deleted if @del_count>0 begin
select * into [退庫單del] from deleted end
if @ins_count>0 begin
select * into [退庫單ins] from inserted end
end
出現這個問題
伺服器: 訊息 156,層級 15,狀態 1,程序 test,行 8
關鍵字 'if' 附近的語法不正確。
不知為何? 堅持從洗馬桶做起
Eric
|
Mickey
版主 ![]() ![]() ![]() ![]() ![]() 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
引言: create trigger [test] on [退庫單] for insert,update,delete as begin declare @ins_count int, @del_count int --多了 "," 號 if @@rowcount = 0 return select @ins_count=count(*) from inserted select @del_count=count(*) from deleted if @del_count>0 begin select * into [退庫單del] from deleted end if @ins_count>0 begin select * into [退庫單ins] from inserted end end 出現這個問題 伺服器: 訊息 156,層級 15,狀態 1,程序 test,行 8 關鍵字 'if' 附近的語法不正確。 不知為何? 堅持從洗馬桶做起 Eric |
huangeider
高階會員 ![]() ![]() ![]() ![]() 發表:288 回覆:492 積分:231 註冊:2003-02-26 發送簡訊給我 |
create trigger [test] on [退庫單] for insert,update,delete as begin declare @ins_count int, @del_count int if @@rowcount = 0 return select @ins_count=count(*) from inserted select @del_count=count(*) from deleted if @del_count>0 begin select * into [退庫單del] from deleted end if @ins_count>0 begin select * into [退庫單ins] from inserted end end可以執行了但是如果小弟在 退庫單中新增一筆沒問題但新增第二筆時就有錯誤訊息了 :資料庫已有相同的[退庫單ins]了 發覺只有在沒有建立[退庫單ins]之前才能去TRIGGER一次 而再TRIGGER第二次時因已有[退庫單ins]了所以沒法再TRIGGER了 不知能否再把有關新增的資料再APPEND在[退庫單ins]中的TABLE中 也就是說若TRIGGER時就能持續的加入異動的資料在[退庫單ins]中 而不是只有一筆 堅持從洗馬桶做起 Eric 發表人 - huangeider 於 2004/04/11 10:45:04 |
huangeider
高階會員 ![]() ![]() ![]() ![]() 發表:288 回覆:492 積分:231 註冊:2003-02-26 發送簡訊給我 |
小弟有解了:
CREATE trigger [test] on [oo]
for insert,delete,update
as
begin
declare @ins_count int,
@del_count int if @@rowcount = 0 return
select @ins_count=count(*) from inserted
select @del_count=count(*) from deleted if @del_count>0 begin
insert into oodel select * from deleted end
if @ins_count>0 begin
insert into ooins select * from inserted end
end 堅持從洗馬桶做起
Eric
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |