着急啊,SQL server中触发器执行失败后其中一个数据库还想继续操作该怎么办

hxy825 2013-04-29 11:33:44
我的局域网内有两台服务器Srv1和Srv2,两台服务器上都有相同的数据库及表结构,我给Srv1中的一个表建立了触发器,触发器也能正常运行的,可突然有一天Srv2服务器在局域网内访问不到了,在Srv1上的系统运行时就报错连接不上了,没法继续进行收费操作了,现在我就是想即使连接不上触发器触发不了我的Srv1上的系统还要照样能运转起来,不至于现在这样一旦Srv2服务器连接不上,Srv1上的系统也不能用,请问各位高手这种情况有没有办法解决啊,谢谢指教
...全文
353 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
daishuguang88 2015-11-30
  • 打赏
  • 举报
回复
也碰到楼主一样的问题,楼主有解决方法吗?
hxy825 2013-04-30
  • 打赏
  • 举报
回复
我现在写了下面的这个函数,倒是可以判断是否连接上了,可是在触发器中加了这个函数来判断如果能连上才执行触发器中的内容,而且单独使用这个函数的时候也的确能返回是否连接上的标志,可放在我客户端收费电脑收费时调用却总是提示:


下面这个是判断远程主机是否连接上的函数:
if exists(select 1 from sysobjects where id=object_id('fgetsstatus') and objectproperty(id,'IsInlineFunction')=0)

drop function fgetsstatus
go

create function fgetsstatus
(
@servername varchar(50), --服务器名
@userid varchar(50)='sa', --用户名,如果为nt验证方式,则为空
@password varchar(50)='' --密码
) returns int
as

begin
declare @re varchar(20),@ire int --返回状态
declare @srvid int --定义服务器、数据库集id
declare @err int,@src varchar(255),@desc varchar(255) --错误处理变量

--创建sqldmo对象
exec @err=sp_oacreate 'sqldmo.sqlserver',@srvid output
if @err<>0 goto lberr

--连接服务器
if isnull(@userid,'')='' --如果是 Nt验证方式
begin
exec @err=sp_oasetproperty @srvid,'loginsecure',1
if @err<>0 goto lberr

exec @err=sp_oamethod @srvid,'connect',null,@servername
end else exec @err=sp_oamethod @srvid,'connect',null,@servername,@userid,@password

if @err<>0 goto lberr

return(@ire)

lberr:
set @ire=-1
return(@ire)
end

go

hxy825 2013-04-30
  • 打赏
  • 举报
回复
另外想请问一下,如何在SQL server2000的存储过程中直接用命令判断另外一台服务器是否连接上或者数据库是否连接上呢,如果可以在存储过程中直接判断出来那就好办了,谢谢指点
hxy825 2013-04-30
  • 打赏
  • 举报
回复
呵呵,我原来的数据库还是SQL server2000的,因为系统东西太多了也没来得及改呢! 主要现在人家是想做成两个帐套,分别在两个服务器上安装相同的数据库,只要Srv1服务器上的数据库产生数据,Srv2服务器上的数据库也跟着产生,但是Srv1上的数据库可能会随时删除数据,删除之后Srv2数据库是不动的,也就是说Srv2上面的数据时最全的!
daiyueqiang2045 2013-04-30
  • 打赏
  • 举报
回复
引用 3 楼 hxy825 的回复:
关键问题是Srv1中的数据会不定时的删除呢,所以不好用楼上说的这种方式呢! 现在就是就是看看能不能在Srv1上的触发器不能正常触发时(或者说Srv2不能访问到时),还要允许进行Srv1上的数据库正常操作呢,现在碰到的就是Srv2服务器连不上时Srv1上的系统就不能用了,哎
定时删除也没有任何问题。 http://www.cnblogs.com/worfdream/articles/3046377.html http://www.cnblogs.com/worfdream/articles/3046380.html
hxy825 2013-04-30
  • 打赏
  • 举报
回复
关键问题是Srv1中的数据会不定时的删除呢,所以不好用楼上说的这种方式呢! 现在就是就是看看能不能在Srv1上的触发器不能正常触发时(或者说Srv2不能访问到时),还要允许进行Srv1上的数据库正常操作呢,现在碰到的就是Srv2服务器连不上时Srv1上的系统就不能用了,哎
daiyueqiang2045 2013-04-30
  • 打赏
  • 举报
回复
1:使用try catch 2:不使用触发器进行更新数据。使用增量式数据提取技术(ETL),将修改的数据定期的更新到另外一个服务器
shoppo0505 2013-04-30
  • 打赏
  • 举报
回复
你可以在触发器中使用try catch段落,如果是链接不上srv2服务器,就catch错误,那么之前的操作就会被commit,没有catch的错误,那么触发器会返回错误到上层操作,所有的操作就会被返回.

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧