討論區快速選單
知識庫快速選單
網路投保旅行平安險 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
Trigger啟動執行檔的問題
更改我的閱讀文章字型大小
作者 : x3052(x3052) 人氣指數超過10000點
[ 貼文 60 | 人氣 12276 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/9 下午 10:11:30
如題,我做了一個sql轉xml的程式sqltoxml,然我要sql資料庫有更動資料時,就去叫我寫的程式,自動轉該表格。

因為sqltoxml會去將要用到的所有表格轉成xml,這時候問題就出現了,它會死當在Trigger呼叫sqltoxml.exe,我測試的結果好像是因為Trigger在執行的時候會霸佔住ATable的樣子(但其它表格可以轉成功),所以無法正常運作,但是只要把sqltoxml裡轉ATable的地方給注解掉後,就不會有問題了。請問有什麼方法可以使它正常運作,能轉ATable。


CREATE TRIGGER A_tr ON [dbo].[ATable]
AFTER INSERT, UPDATE, DELETE
AS
EXEC master..xp_cmdshell 'C:\sqltoxml.exe', no_output
作者 : x3052(x3052) 人氣指數超過10000點
[ 貼文 60 | 人氣 12276 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/10 下午 04:25:49
那再請問一下在Trigger裡能直接轉成XML並指定位置存檔嗎?
作者 : aaaaaaaa(路人) SQL Language優秀好手貼文超過200則人氣指數超過10000點
[ 貼文 271 | 人氣 11161 | 評價 1760 | 評價/貼文 6.49 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/11 下午 05:42:27
你指的是要sql 產出的xml(含機碼),那個還是要加工過,能夠讓xsl解析的xml呢?
小弟有疑問,一定要在trigger做嗎?
作者 : x3052(x3052) 人氣指數超過10000點
[ 貼文 60 | 人氣 12276 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/11 下午 08:50:40
是讓別的程式用的xml檔。
在trigger做是因為希望資料更新時,就更新xml檔。
作者 : aaaaaaaa(路人) SQL Language優秀好手貼文超過200則人氣指數超過10000點
[ 貼文 271 | 人氣 11161 | 評價 1760 | 評價/貼文 6.49 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/12 上午 08:38:33
可是這樣不是每異動一筆就傳一次xml的資料了,小弟之前有寫過,但是用store procedures寫,再透過AP(用delphi)方式傳送或接收(跑迴圈塞入table),進而做到B2B是吧!如有不對請各位大大給予指正。
小弟寫在store procedures沒有您的狀況發生耶~~
作者 : x3052(x3052) 人氣指數超過10000點
[ 貼文 60 | 人氣 12276 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/12 上午 09:20:54
我也覺得很奇怪啊,明明ALTER是在上面的更新、刪除、新增後,才執刪下面的,為什麼會被lock住呢?
您用store procedures,可以正常執行嗎?我再試試。謝謝你回應。
作者 : x3052(x3052) 人氣指數超過10000點
[ 貼文 60 | 人氣 12276 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/12 上午 09:23:27
啊,對了,那個xml檔,只是把它存在本機而已,不是每次改,都會傳出去,不過,都會重新存就對了。
作者 : x3052(x3052) 人氣指數超過10000點
[ 貼文 60 | 人氣 12276 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/13 上午 07:46:38
我試了一下,還是不行。
作者 : aaaaaaaa(路人) SQL Language優秀好手貼文超過200則人氣指數超過10000點
[ 貼文 271 | 人氣 11161 | 評價 1760 | 評價/貼文 6.49 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/13 上午 08:56:25
單純RUN你的AP是OK的?
你的XML是用SQL語法產出,還是跑迴圈建出XML再SAVE AS CLIENT?
作者 : x3052(x3052) 人氣指數超過10000點
[ 貼文 60 | 人氣 12276 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/13 下午 05:42:18
不用trigger的話,是沒問題的,但是用trigger在它更新時,去啟動我寫的程式就有問題了,因為table被lock住了。所以我想看有沒有別的方法可以達成我的需求。※更新時trigger啟動,(好像)還沒有把更新完成,只是新lock住表格,所以這時候,用我的程式,會有死結產生。

我的XML是用SQL語法產出的,用FOR XML AUTO,然後再存檔的。
作者 : aaaaaaaa(路人) SQL Language優秀好手貼文超過200則人氣指數超過10000點
[ 貼文 271 | 人氣 11161 | 評價 1760 | 評價/貼文 6.49 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/16 上午 11:08:20
你產出的xml是同trigger那個table嗎?那就有可能是你寫在trigger的程序中,所造成的,trigger本身就有lock table的限制下,而你又同時對此table做xml的產出,所以有可能造成死結,如果你是寫在ap上面,做完之後再去產出xml應該是不會有問題,如after post之後去呼叫store procedures或可以寫在job裡面去run,更可以直接再ap寫,應該都不會有問題才是,你可以用監控程式去觀查,建議再加上有排隊機制的程序,來避免掉死結的問題,如果有100client,我猜應該還是會有同樣的問題存在。
作者 : x3052(x3052) 人氣指數超過10000點
[ 貼文 60 | 人氣 12276 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/16 下午 05:51:25
現在就是因為lock住的問題,才會這樣吧。
不知道有沒有辦法在trigger裡把下面這個的結果存到一個檔或是變數裡
"SELECT * from ATable FOR XML AUTO, ELEMENTS"
作者 : aaaaaaaa(路人) SQL Language優秀好手貼文超過200則人氣指數超過10000點
[ 貼文 271 | 人氣 11161 | 評價 1760 | 評價/貼文 6.49 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人x3052註記此篇回應為很有道理 2005/5/17 上午 09:21:11
不行耶!
看來你誤會我之前的意思了!
我也是在AP(用Delphi寫產出xml及mail xml&xsl),因為xml用sql server FOR XML語法有太多限制了。而我用stored procedures只是去排job的工作排程再依系統是否idle再去呼叫ap run(傳入相關變數)。
<<xml用FOR XML的限制取自help文件>>
1.無論子選擇是在 UPDATE、INSERT 或 DELETE 陳述式、巢狀 SELECT 陳述式或其他陳述式 (SELECT INTO,指派),FOR XML 在這些子選擇中都是無效的。
2.若有任何使用 COMPUTE BY 或 FOR BROWSE 子句的選擇,FOR XML 也是無效的
3.GROUP BY 以及彙總函數目前並不支援 FOR XML AUTO。
4.如果選擇需要在預存程序中作進一步的處理,則無法使用 FOR XML。
5.FOR XML 不可用於資料指標 (Cursor)。
6.一般來說,若選擇不是產生直接輸出至 Microsoft® SQL Server™ 2000 用戶端,就無法使用 FOR XML。
7.在 INSERT 陳述式呼叫的 FOR XML 無法使用在預存程序。
8.......等等

用FOR XML是搭配IIS...等相關線上支援的使用~詳細你可以再看一下HELP等文件。

所以在trigger寫那段應該是不行的,至於呼叫你的AP,我在store procedures去排job去呼叫ap,感覺上沒有什麼太多問題耶,對了我ap是用ado的元件,有二部份,一部份是產出供xsl解析看,一部份也可以是有機碼的xml或是沒有機碼的xml(跑row跑field產出)

提供做為參考,希望能夠有所幫助!!!

作者 : x3052(x3052) 人氣指數超過10000點
[ 貼文 60 | 人氣 12276 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/17 下午 02:24:14
我大概了解一點了。不過預存程序不是要呼叫,才會執行嗎?怎麼在我更新表的時候就自已啟動,是配合Trigger嗎?
作者 : aaaaaaaa(路人) SQL Language優秀好手貼文超過200則人氣指數超過10000點
[ 貼文 271 | 人氣 11161 | 評價 1760 | 評價/貼文 6.49 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/17 下午 03:38:02
因為你是寫在trigger所以更新就會觸動~~
stored procedures是靠程式去觸動,其實你可以直接寫在你的main ap就簡單多了
如果你堅持要在trigger或stored procedures寫,你可能就要自己寫迴圈去跑fields,自行去產出同xml架構的格式,之前好像有寫過,but好像是2~3年前的時候寫的,你試試看吧!
祝你成功!
作者 : x3052(x3052) 人氣指數超過10000點
[ 貼文 60 | 人氣 12276 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/17 下午 03:52:39
我寫的那一個程式是有轉成xml並儲存的功能。但是要自已去執行,才能產生啊。不知道有沒有方法能讓他自動啟動(在更新資料表的資料時)。
作者 : x3052(x3052) 人氣指數超過10000點
[ 貼文 60 | 人氣 12276 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/17 下午 04:00:17
"至於呼叫你的AP,我在store procedures去排job去呼叫ap,感覺上沒有什麼太多問題耶,對了我ap是用ado的元件,有二部份,一部份是產出供xsl解析看,一部份也可以是有機碼的xml或是沒有機碼的xml(跑row跑field產出)"

這邊能請您再說明更詳細嗎?如何在store procedures去排job去呼叫自已寫的程式。
作者 : aaaaaaaa(路人) SQL Language優秀好手貼文超過200則人氣指數超過10000點
[ 貼文 271 | 人氣 11161 | 評價 1760 | 評價/貼文 6.49 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/17 下午 04:04:49
你可以用dos命令或者是預儲程序或者是ap去呼叫另一個ap,我是用delphi,它傳遞至另一支exe時可以帶參數,如:c:\aa.exe T123,後面T123即是傳入exe的變數,至於你程式的寫法,就要看你是用什麼ap了,這我就幫不上忙了,你可以查查你的工具看看,你可以查查你的ap接收變數是用什麼方法?加油~希望你能解決這個問題了~看你也蠻累了~想當初我也是.........,共勉之~~加油!!!
作者 : x3052(x3052) 人氣指數超過10000點
[ 貼文 60 | 人氣 12276 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/17 下午 04:32:54
多謝,我再試試看 。
作者 : x3052(x3052) 人氣指數超過10000點
[ 貼文 60 | 人氣 12276 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/21 下午 04:40:47
還是用trigger解決了。不過是先呼叫ex1.exe,再由ex1.exe呼叫真正執行的程式執行(真正執行的程式,會先等幾秒,好讓trigger結束),然後ex1.exe立刻結束自已,以防止lock。
作者 : crystalchen(果子)
[ 貼文 60 | 人氣 632 | 評價 280 | 評價/貼文 4.67 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/7/19 下午 04:23:58
請問你前端的應用程式(就是去新增修改資料庫的程式)也是你開發的嗎?
上次我也是遇過這種問題
我是利用trigger當發現a資料庫的資料被刪除的時候,順便會將b資料庫的資料也刪除
因為a資料庫是屬於erp系統(是公司購買的套裝軟體)
所以當啟動這個trigger的時候,不僅我的b資料庫的資料沒有被刪除掉
A資料庫的資料還被lock住
想想會不會是程式寫錯了,就改成很簡單的只發mail通知我,不執行任何語法,結果還是不能work
改了半天無法解決,又不能修改a公司的程式碼
所以後來就改成另外又外掛程式執行的方式解決
 板主 : 徵求中
 > SQL Server 7/2000 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - SQL Server 7/2000 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
SQL Server 7/2000
1 小朱 1540 
2 小台 1520 
3 Gordon 600 
4 ㄉ一ˊㄎㄜˋ 580 
5 路人 490 
6 max 470 
7 william 410 
8 Aries 250 
9 阿利 180 
10 羅啟章 160 
SQL Server 7/2000
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.078125