【问题标题】:Advantage database how to retieve connection name优势数据库如何检索连接名称
【发布时间】:2011-02-07 10:57:31
【问题描述】:

我正在使用 Sybase Advantage,我有 2 个表:

  • 第一个表有数据记录
  • 第二个表存储第一个表的历史记录

第一个表有触发器来填充第二个表中的记录,具体取决于哪些字段发生了变化。

我想存储连接名称(发出请求的 PC)、活动查询页面(服务器信息对话框)中显示的名称,而不是用户名。有谁知道这是否可能?

谢谢

【问题讨论】:

标签: triggers connection advantage-database-server


【解决方案1】:

以下 SQL 语句可用于检索计算机名而不是用户名。

SELECT * FROM ( EXECUTE PROCEDURE sp_mgGetConnectedUsers() ) ConnUsers WHERE ConnUsers.DictionaryUser = USER();

存储过程 sp_mgGetConnectedUsers 记录在 here

【讨论】:

  • 感谢您的回复,但此查询不起作用,我使用的是 Advantage 版本 9。执行过程返回已连接用户的信息,但查询返回缺少表错误。如果多个用户具有相同的连接详细信息,这也不起作用。我可以知道哪个 OSUserLoginName 正在使用触发器(更新表)。
  • 如果您的字典登录不是唯一的,那么事情会变得有点复杂。最好的办法是将应用程序 ID 设置为包含唯一的 GUID 识别字符串,然后在其上进行搜索。
  • 我们使用的是版本 9,它在连接组件中没有 ApplicationID 属性。我不知道在触发器中这将如何工作。我在想,与其将它包含在触发器中以将记录添加到历史表(在触发器之后),不如在与用户一起更新表中的字段之前可能有另一种触发器类型,然后在第二个触发器之后可以拾取这个价值。
  • 您可以随时调用 sp_SetApplicationID 来设置应用程序 ID。我个人最喜欢的是 EXECUTE PROCEDURE sp_SetApplicationID( NEWIDSTRING( N ) + ' ' + APPLICATIONID() );您仍然拥有列出可执行文件名称的应用程序 ID,但现在有一个用于连接的 GUID。
  • 效果很好,添加了一个新的存储过程,该过程由用户在客户端记录它设置,这会更改 applicationID,然后我在触发器中检索 applicationID。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
相关资源
最近更新 更多