我正在使用一个使用六个数据库的系统(我不是开发人员),所有这些都在同一个Sybase ASE 15.7服务器上。
我需要访问的两个重要数据库是TRANSACTIONS和CONFIGURATION。两者都是实时更新的,只有实时更新才能捕获我想要的数据。这是我的触发器的一个超简化示例:
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
当从TRANSACTIONS数据库外部引用表时,我的触发器总是失败,而不是在任何其他时间。
顺便说一句,我在创建触发器时以系统管理员身份登录。
如Sybase文档中所述,触发器是事务的一部分,如果触发器中发生严重错误,则事务将回滚。这正是我所看到的。
我怀疑错误是由三种可能原因之一造成的:
关于#1,我已将SELECT授予PUBLIC和' dbo'在UserConfiguration表上。 DBO是在TRANSACTIONS中创建UserLog的用户。但我不确定我的授权是否正确应用,因为每个用户都限定为特定数据库,而不是全局用户。
关于#2,我无法弄清楚是否存在可以配置的任何可能的限制,而不是克服。
关于#3,Sybase文档声明我的触发器应该能够引用其他数据库中的表。
最后,由于我无法看到错误被引发或陷阱,我几乎没有什么可以继续解决这个问题。我不想将自己的记录插入受监控的表中,因为它不是我的表。我一直在寻找某种错误日志,但我没有看到任何这样的事情。有吗?我研究过尝试设置等效的TRY-CATCH块,这些块可以防止错误冒出,但Sybase似乎没有这样的控件。
有没有人对我如何在这里取得进展有任何想法?
我的触发器将实时填充我自己的表格,只需要从插入的'中选择SELECT。对象和两个数据库中的表。