【问题标题】:Trigger definition is NULL when using Linked server使用链接服务器时触发器定义为 NULL
【发布时间】:2017-07-18 12:14:26
【问题描述】:

以下是我面临的问题:-

  1. 当我在 ServerA 上运行以下操作时,我得到了输出

        SELECT      tbl.Name, tr.name, c.Text
        FROM      sys.sysobjects tr
              Inner Join sys.sysobjects tbl On tr.parent_obj = tbl.id
              Inner Join sys.syscomments c On tr.id = c.id
        WHERE      tr.xtype = 'TR' And tbl.xtype = 'U'
    
  2. 当我从服务器 B 运行相同的查询并将服务器 A 引用为链接服务器时出现问题,我没有得到任何输出。

        SELECT tbl.Name, tr.name, c.Text 
        FROM LinkedServerA.Database.sys.sysobjects tr
        Inner Join LinkedServerA.Database.sys.sysobjects tbl On tr.parent_obj = tbl.id
        Inner Join LinkedServerA.Database.sys.syscomments c On tr.id = c.id
        WHERE tr.xtype = 'TR' And tbl.xtype = 'U'
    
  3. 即使我运行以下命令,我也会得到 NULL:

    从 LinkedServerA.Database.sys.syscmets 中选择文本

任何见解将不胜感激!

【问题讨论】:

  • 您的链接服务器设置是否正确?该语句适用于我查询链接服务器。

标签: sql sql-server triggers linked-server


【解决方案1】:

这意味着您的登录名使用另一个登录名映射到链接服务器,因此您无权使用链接服务器登录名查看元数据。

您可以使用以下代码检查您的登录以及链接服务器上的数据库用户/角色:

select * 
from openquery([YourLinkedServer], 'select system_user as linked_srvr_login, 
                             name from YourDB.sys.user_token where principal_id > 0')

【讨论】:

  • 以下是您要求运行 linked_srvr_login name linkedserverlogin linkedserverlogin linkedserverlogin db_datareader 的查询的结果
  • 如您所见,您并没有使用您的登录名映射到链接服务器,而是使用linkedserverlogin,它只是一个db_datareader。所以你只是没有权限查看触发器元数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
相关资源
最近更新 更多