Sql server 由触发器执行时,Select Join查询不起作用

Sql server 由触发器执行时,Select Join查询不起作用,sql-server,stored-procedures,join,triggers,Sql Server,Stored Procedures,Join,Triggers,有人知道为什么我在触发器中的连接查询是空的吗?但是,如果我将这个相同的查询放在存储过程中,并在触发器之外运行存储过程,那么它运行得很好。但是,如果您有一个触发器,使用联接表执行此存储过程,它将变为空。如果直接在SQLManagementStudio中运行存储过程,它会很好地提取数据。如果在没有连接的情况下运行触发器,并且只对一个表进行简单的选择,那么它运行良好 问题似乎是当它在触发器中执行select并且有一个Join时 ALTER TRIGGER dbo.Emergency on dbo.I

有人知道为什么我在触发器中的连接查询是空的吗?但是,如果我将这个相同的查询放在存储过程中,并在触发器之外运行存储过程,那么它运行得很好。但是,如果您有一个触发器,使用联接表执行此存储过程,它将变为空。如果直接在SQLManagementStudio中运行存储过程,它会很好地提取数据。如果在没有连接的情况下运行触发器,并且只对一个表进行简单的选择,那么它运行良好

问题似乎是当它在触发器中执行select并且有一个Join时

ALTER TRIGGER dbo.Emergency  on dbo.Incident 
AFTER INSERT, UPDATE
AS 



SET NOCOUNT ON

BEGIN

DECLARE @ID as int;

SELECT top 1 @ID=InsertedRow.Id FROM inserted InsertedRow;


    BEGIN
        Declare @g as varchar(255);
        --this doesn't work with JOIN 
        SELECT  @g=Link 
        FROM MyDataTable as Incident JOIN  MyOtherInformationTable 
        as Info on Incident.Id=Info.Id
        WHERE (Incident.Id=@ID);

        /* this works without join
        SELECT  @g=Link 
        FROM MyDataTable as Incident 
        WHERE (Incident.Id=@ID);
                    */

    END;

END;

下面的触发器将返回事件中新插入或更新的记录以及MyotherInformation表中的匹配数据

ALTER TRIGGER dbo.Emergency  on dbo.Incident 
AFTER INSERT, UPDATE
AS 
BEGIN
   SET NOCOUNT ON

    select *
    from 
    inserted 
    left join MyOtherInformationTable on inserted.ID = MyOtherInformationTable.ID

END;

如何填充MyotherInformation表?您如何期望两个表ID相同?它由另一个对它们有约束的系统填充。没有事件表中的数据,MyotherInformation表无法存在。我应该指定它更像是事件的子表。我正在运行的查询应该返回一条记录,如果在触发器外部运行,但在触发器内部为空,则返回一条记录。这就解决了您的问题。当您将记录插入事件表时,MyotherInformation表不会有相同ID的记录。您是否总是只插入/更新表中的一行?因为如果不插入/更新,则此触发器逻辑无论如何都有缺陷(我的意思是,它应该运行,但很可能不会执行您想要的操作)@wirble基本上,Vasanth的意思是,由于您只是在
MyDataTable
上插入行,并且您说
MyTheInformation table
是第一个表的子表,然后,预计该表中没有用于该
id
yetI am标记为答案的行,但如果我们无法从另一个表中获取信息(至少在插入时),那么它就有点违背了首先加入它的目的。然而,这是系统的局限性,而不是答案本身。谢谢你的帮助。