Sql 触发器不会使用来自另一个实例的数据插入\DB

Sql 触发器不会使用来自另一个实例的数据插入\DB,sql,sql-server,database-trigger,Sql,Sql Server,Database Trigger,我试图在创建新记录时运行insert触发器。此记录将使用另一个实例\DB中的数据插入到另一个表中。我可以将其作为查询运行,但作为触发器,它不会触发或插入。我想知道为什么。谢谢 GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER TRIGGER [dbo].[TriggerName] ON [dbo].[Table] AFTER INSERT AS BEGIN SET NOCOUNT ON; WIT

我试图在创建新记录时运行insert触发器。此记录将使用另一个实例\DB中的数据插入到另一个表中。我可以将其作为查询运行,但作为触发器,它不会触发或插入。我想知道为什么。谢谢

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[TriggerName]
   ON  [dbo].[Table] 
   AFTER INSERT
AS 
BEGIN
    SET NOCOUNT ON;

    WITH batch AS (
        SELECT              b.uniqueid
                            ,CASE WHEN b.versionnumber LIKE '%SOMETHING%' THEN '1' + SUBSTRING(REPLACE(bh.pvalue,'MIXER_',''),1,1) ELSE SUBSTRING(REPLACE(bh.pvalue,'SOMETHING',''),1,1) END AS MIXER


        FROM                inserted b
          INNER JOIN        table1 bh ON b.uniqueid = bh.Uniqueid

        WHERE               bh.DescriptAPI = 'Alias_mixer_class'
    )

    INSERT INTO BATCH_TRACKING
    (ORDER_ID, BATCH_ID, DATE_CREATED)

    SELECT          o.ORDER_ID
                    ,b.uniqueid
                    ,CURRENT_TIMESTAMP

    FROM            [INSTANCE\DB].ProdOrchTest.dbo.table3 o
      INNER JOIN    batch b on o.LINE_NUM = b.MIXER

    WHERE           o.LINE_POSITION = 0

END

您是否创建了链接服务器以获取远程数据?否则,您将无法查询远程数据。

若要调试,请删除
SET NOCOUNT ON
,以便在从SSMS插入时获得触发器内的选定行数。另外,复制第一条
SELECT
语句以获取“批处理”记录的数量。此外,我更喜欢为所有远程表创建同义词,并且只通过同义词在代码中引用它们。select语句始终只返回一条记录,我在尝试同义词时确实删除了no计数,但没有执行任何操作从基本调试开始-因为我们不知道您的系统是什么样子,也不知道您如何验证它。将查询取出并放入单个脚本中。添加一个表变量,该表变量至少包含2行,其中包含uniqueid的现有值。删除insert并用表变量替换inserted。运行它并验证。如果这样做有效,那么您是如何触发触发器的呢?让触发器访问自己数据库之外的任何资源几乎总是一个坏主意,更不用说实例了。比如说,如果有任何网络问题暂时影响对远程实例的访问,那么您刚刚中断了此表上的insert是。这项工作已经完成,并正在与其他数据库一起使用,但您是否遇到任何问题?您可以查询sys.dm_exec_trigger_stats,查看您的触发器是否已触发。