Sql server 由触发器执行时,Select Join查询不起作用
有人知道为什么我在触发器中的连接查询是空的吗?但是,如果我将这个相同的查询放在存储过程中,并在触发器之外运行存储过程,那么它运行得很好。但是,如果您有一个触发器,使用联接表执行此存储过程,它将变为空。如果直接在SQLManagementStudio中运行存储过程,它会很好地提取数据。如果在没有连接的情况下运行触发器,并且只对一个表进行简单的选择,那么它运行良好 问题似乎是当它在触发器中执行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
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标记为答案的行,但如果我们无法从另一个表中获取信息(至少在插入时),那么它就有点违背了首先加入它的目的。然而,这是系统的局限性,而不是答案本身。谢谢你的帮助。