Database db1.table1上的触发器在引用db2.table2时立即失败

Database db1.table1上的触发器在引用db2.table2时立即失败,database,triggers,sap-ase,Database,Triggers,Sap Ase,我使用的是一个系统,我不是使用半打数据库的开发人员,所有数据库都在同一台Sybase ASE 15.7服务器上 我需要访问的两个重要数据库是事务和配置。两者都是实时更新的,只有实时才能捕获所需的数据。下面是我的触发器的一个超级简化示例: use TRANSACTIONS go CREATE TRIGGER myTrigger ON UserLog FOR INSERT AS BEGIN -- -- do stuff here within the TRANSACTION database, n

我使用的是一个系统,我不是使用半打数据库的开发人员,所有数据库都在同一台Sybase ASE 15.7服务器上

我需要访问的两个重要数据库是事务和配置。两者都是实时更新的,只有实时才能捕获所需的数据。下面是我的触发器的一个超级简化示例:

use TRANSACTIONS
go
CREATE TRIGGER myTrigger
ON UserLog
FOR INSERT
AS 
BEGIN
--
-- do stuff here within the TRANSACTION database, no problems.
-- .......

-- Now, try to access the CONFIGURATION database, and boom, it fails
INSERT INTO myLog (somedata)
SELECT userData 
FROM CONFIGURATION.dbo.UserConfiguration
WHERE ...blah...

END
当从事务数据库外部引用表时,我的触发器总是失败,而不是在任何其他时间

顺便说一句,当我创建触发器时,我以系统管理员的身份登录

如Sybase文档中所述,触发器是事务的一部分,如果触发器中发生严重错误,事务将回滚。这正是我所看到的情况

我怀疑错误是由以下三种可能的原因之一造成的:

“其他”数据库中表的某种安全授权 在构建数据库时配置的安全限制 无法克服的Sybase限制 关于1,我已经在UserConfiguration表中将SELECT授予PUBLIC和'dbo'。DBO是在事务中创建UserLog的用户。但我不确定我的授权是否正确应用,因为每个用户的作用域都是特定的数据库,而不是全局用户

关于2,我不知道是否有任何可能的限制可以在中配置,并且无法克服

关于3,Sybase文档说明我的触发器应该能够引用其他数据库中的表

最后,由于我看不到错误被提出或捕获,我几乎没有什么可以继续解决这个问题。我不想将自己的记录插入受监视的表中,因为它不是我的表。我到处寻找一些错误日志,但我没有看到任何这样的东西。有吗?我研究过如何设置与TRY-CATCH块等效的块,这些块可以防止错误冒泡,但Sybase似乎没有这样的控件

有人知道我在这方面会取得什么进展吗


我的触发器将实时填充我自己的表,只需从“插入”对象和两个数据库中的表中进行选择。

查看sp_addmessage in comination with raiserror,设置要捕获的错误。好主意,迈克尔。我将不得不考虑这一点,看看它将如何推动我前进。我的代码不是导致触发的调用方,而是供应商的应用程序。我希望在供应商应用程序执行insert时生成一些额外的辅助数据,并将这些数据存储到我控制的表中。我可以安装触发器,但正如我所提到的,我的代码中出现了一个错误,该错误仅在作为触发器执行时发生。当引发该错误时,事务将回滚,并且不保留任何跟踪。我想防止回滚并识别错误。