您需要重新设计您的方法。数据库无法 只知道
有关您的应用程序用户信息的任何信息。而且,不,您不能将参数传递给触发器。但是您可以通过触发来引用您自己的表,因此有一种方法…
当您连接到数据库时,每个连接都会获得其自己的进程ID。您可以通过@@ spid获得此信息。
因此,当触发器触发时,您可以使用它来知道是哪个连接导致了更改。
您可以使用相同的数据库登录名进行100个并发连接,并且每个连接都有其自己的@@ spid值。
为了使它对您有用,您需要准备所有连接。每次建立连接时,您的应用程序都应写入表中,以记录使用该@@ spid的应用程序的用途。
也许像…这样简单
CREATE TABLE map_spid_application_user ( spid BIGINT, application VARCHAr(128), user VARCHAr(128), PRIMARY KEY (spid) )
然后,在每个连接上,运行类似这样的内容(可能通过存储过程)…
DELETE map_spid_application_user WHERe spid = @@spidINSERT INTO map_spid_application_user SELECT @@spid, 'myApp', 'myUser'
然后,在触发器中,您可以在此表上引用/联接以查找@@ spid引用的人。
您还可以变得更聪明,并使用类似的方法来永久记录用户连接的内容(如spid)。任何spid的当前用户将始终是连接日期时间最近的用户。
那时您几乎可以做任何事情。因为您正在创建所有信息,而不是依靠数据库 仅知道 @@ spid以外的任何信息。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)