我有一个名为GLOBAL_TRACKING的查找表,需要与另一个表USER中的数据同步。由于前端用户帐户创建的特定实例中的代码存在一些问题(我知道 - 理想情况下,这应该在代码中修复,但我没有这个选项),我在GLOBAL_TRACKING中获取条目为永远不应为NULL的字段设置NULL值的表。由于这仅在初始帐户创建时发生,我可以假设USER记录的LOGIN_ID字段应始终与GLOBAL_TRACKING表的ALT_ID字段匹配。
我想检查这些情况,如果它为null,请从USER表中提取LOGIN_ID值,然后在插入之前将其插入GLOBAL_TRACKING表的ALT_ID字段。我试过做一个常规的插入触发器(在插入时更新它),但没有成功。我正在尝试'INSTEAD OF INSERT'触发器,并遇到类似的错误(它被困在应用程序级别,但例外:“无效的对象名称'UPDATED'。”)。这样的事情可能吗?这是我的而不是触发器:
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
答案 0 :(得分:0)
沿着这个
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