插入时更正记录项(SQL触发器)
我有一个名为GLOBAL_TRACKING的查找表,它需要与另一个表USER中的数据同步。由于前端用户帐户创建的特定实例中的代码存在一些问题(我知道-理想情况下,这应该在代码中得到修复,但我没有该选项),我在全局_跟踪表中得到的条目为一个字段设置了一个空值,该字段永远不应该为空。由于这只发生在初始帐户创建时,我可以假设用户记录的LOGIN\u ID字段应该始终与全局跟踪表的ALT\u ID字段匹配 我想检查这些情况,如果为null,则从用户表中提取LOGIN\u ID值,并在插入之前将其插入全局跟踪表的ALT\u ID字段。我尝试过做一个常规的插入触发器(在插入时更新),但没有成功。我目前正在尝试一个“而不是插入”触发器,并且遇到了类似的错误(它被困在应用程序级别,只有一个例外:“无效的对象名‘已更新’”)。这样的事情可能吗?这是我的替代触发器:插入时更正记录项(SQL触发器),sql,sql-server,triggers,Sql,Sql Server,Triggers,我有一个名为GLOBAL_TRACKING的查找表,它需要与另一个表USER中的数据同步。由于前端用户帐户创建的特定实例中的代码存在一些问题(我知道-理想情况下,这应该在代码中得到修复,但我没有该选项),我在全局_跟踪表中得到的条目为一个字段设置了一个空值,该字段永远不应该为空。由于这只发生在初始帐户创建时,我可以假设用户记录的LOGIN\u ID字段应该始终与全局跟踪表的ALT\u ID字段匹配 我想检查这些情况,如果为null,则从用户表中提取LOGIN\u ID值,并在插入之前将其插入全局
DECLARE @GlobalID as NVARCHAR(50)
DECLARE @AlternateID as NVARCHAR(255)
SET @GlobalID = (SELECT GLOBAL_ID FROM inserted)
SET @AlternateID = (SELECT ALT_ID FROM inserted)
IF (@AlternateID IS NULL
AND ((SELECT COUNT(LOGIN_ID)
FROM USER
WHERE USER_ID = @GlobalID) > 0))
BEGIN
SET @AlternateID = (SELECT LOGIN_ID
FROM USER
WHERE USER_ID = @GlobalID)
BEGIN
UPDATE GLOBAL_TRACKING
SET ALT_ID = @AlternateID
WHERE GLOBAL_ID = @GlobalID
END
END
沿着这条路走
DECLARE @GlobalID as NVARCHAR(50)
DECLARE @AlternateID as NVARCHAR(255)
SET @GlobalID = (SELECT GLOBAL_ID FROM inserted)
DECLARE @SQL VARCHAR(2000)
SET @SQL='SELECT ALT_ID FROM inserted where GLOBAL_ID= ''' + @GlobalID+'''' ;
EXEC (@SQL)
SET @AlternateID = EXEC (@SQL)
IF (@AlternateID IS NULL
AND ((SELECT COUNT(LOGIN_ID)
FROM USER
WHERE USER_ID = @GlobalID) > 0))
BEGIN
SET @AlternateID = (SELECT LOGIN_ID
FROM USER
WHERE USER_ID = @GlobalID)
BEGIN
UPDATE GLOBAL_TRACKING
SET ALT_ID = @AlternateID
WHERE GLOBAL_ID = @GlobalID
END
END
谢谢你的回复。我在'EXEC'关键字的'Set@AlternateID=EXEC(@SQL)'处遇到语法错误。还有几个问题-第一个初始的“EXEC(@SQL)”调用的目的是什么?我们获取GlobalID的方式与EXEC的方式有什么区别?再次感谢!