我在DTS 设计器中做了一个DTS包:dtstxt,功能是把数据库TEST中的SB2表导出TXT文件,在DTS中能够成功执行,而且在查询器中执行:
exec master..xp_cmdshell 'dtsrun /S riverside /E /N dtstxt'
成功!
然后我在表SB2中写了个触发器:
create trigger ct
on sb2
for insert
as
exec master..xp_cmdshell 'dtsrun /S riverside /E /N dtstxt'然后在查询器中执行:
insert into sb2(code,col,co) values ('abc','wcv','123')
一执行就死在那了,不知道是不是死锁了还是什么原因,
请大家指教啊!
或者怎么解决?另外如果能把实现下面需求的代码,请贴出来分享一下?利用DTS包实现TXT导入到SQL中,SQL导出到TXT中,
然后在一个表中写个触发器,INSERT动作,来调用DTS包!
谢谢!

解决方案 »

  1.   

    --以下觀點只是猜測,LZ可以試下,不一定成功。排除其他錯誤的情況下,應該是死鎖了。
    因為你的dts也用到了sb2 ,與trigger綁在一起了,而且這種死鎖一般sql server還偵測不到。
    可以打開windows工作管理員,應該可以看到dtsrun已經在執行了。如果你的dts是單純的轉出資料,可以在轉換前加一個sql execute task來改變交易等級。
    sql execute task的指令:
      set transaction isolation level read uncommitted當然,也可以在trigger中,先完成交易,
    create trigger ct 
    on sb2 
    for insert 
    as 
    COMMIT TRAN  --完成交易
    exec master..xp_cmdshell  'dtsrun /S riverside /E /N dtstxt ' 但是這種修改trigger的方式不咋地,容易造成以后維護麻煩,還拖慢insert的時間。所以推薦第一種方法,修改dts,降低其交易等級。
      

  2.   

    我用DTS包把TXT文件导入到SQL中,能成功执行,但是没有数据记录,请问是怎么回事呢?