大侠快看:sqlserver 触发器能实现如下功能。。。。。???(200分)

  • 主题发起人 主题发起人 xhaolifu
  • 开始时间 开始时间
X

xhaolifu

Unregistered / Unconfirmed
GUEST, unregistred user!
我想将输入sqlserver的数据及时导入oracle库,我采用了触发器,想通过触发程序的方式(xp_cmdshell),
将数据导入oracle。但导入的数据中有memo类型,xp_cmdshell命令带的参数大于255,请问触发器能实现吗?
触发器如下:
CREATE TRIGGER TRIGGER_UP ON BTS_CURRENT_MALFUNTION
FOR insert
AS
declare @finish_T varchar(20)
declare @mal_type varchar(20)
declare @result varchar(200)
declare @note varchar(200)
declare @cmdstr varchar(800)
select @finish_T=reportdate,@mal_type=mal_typeid ,@result=service_result,@note=note from inserted

select @cmdstr='ReturnData.exe 0 '+@finish_t+' '+@mal_type+' '+@result+' '+@note

exec master..xp_cmdshell @cmdstr
 
大侠们说说呀!!
 
只能给你提供思路
用触发器通知你的程序需要把数据更新到Oracle(这里其实有一个问题,用户事务取消怎么办?)
程序里接收到数据源的表名,及ID后
取得数据,把指定记录导入到Oracle中
也就是说,数据的导出、导入都是在你的程序中执行
触发器只起到通知的效果。
只要你解决了我上面说的那个问题,一切就OK了
在Oracle中可以通过DBMS_ALERT来搞定,它只有在事务COMMIT后才发出。
 
不要用 for insert ,用instead insert可以处理image,text等大字段
 
[red]xianjun[/red]大侠的说法,对我有点启示;但我还想问[red]hebohb[/red],
将insert换为instead insert,应该仅仅是对变量赋值而言,赋值后能将这些值通过tigger
送到程序吗?
 
使用 text、ntext 和 image 函数
有两个 text、ntext 和 image 函数专门用于对 text、ntext 和 image 数据所进行的操作:

TEXTPTR 返回 binary(16) 对象,该对象包含指向 text、ntext 或 image 实例的指针。指针一直有效,直到删除该行。


TEXTVALID 函数用来检查指定的文本指针是否有效。
文本指针被传递到用于操作 text、ntext 和 image 数据的 READTEXT、UPDATETEXT、WRITETEXT、PATINDEX、DATALENGTH 和 SET TEXTSIZE Transact-SQL 语句。

在 Transact-SQL 语句中,总是使用数据的指针或地址来引用 text、ntext 和 image 数据。

下面的示例使用 TEXTPTR 函数来查找与 pubs 数据库的 pub_info 表中 pub_id 0736 相关联的 text 列 (pr_info)。下例首先声明一个局部变量 @val。然后将文本指针(长二进制字符串)置于 @val 中,并将其作为参数提供给 READTEXT 语句,该语句将返回从第五个字节(偏移量为 4)开始的 10 个字节。

USE pubs
DECLARE @val varbinary(16)
SELECT @val = textptr(pr_info) FROM pub_info
WHERE pub_id = '0736'
READTEXT pub_info.pr_info @val 4 4

下面是结果集:

(1 row(s) affected)

pr_info
----------------------------------------
yet

支持使用 CAST 函数进行从 text 到 varchar、从 ntext 到 nvarchar 和从 image 到 varbinary 或 binary 的显式转换,但 text 或 image 数据将截断为 8,000 个字节,ntext 数据将截断为 4,000 个字符(8,000 个字节)。从 text、ntext 或 image 到其它数据类型的转换(无论是显式的还是隐性的)都不支持。但是,可以对 text、ntext 或 image 数据进行间接转换,例如:

CAST( CAST( text_column_name AS VARCHAR(10) ) AS INT )。


 
后退
顶部