【发布时间】:2013-04-06 14:10:04
【问题描述】:
好的,所以我有一个相当基本的触发器:
换句话说,插入后,获取IP信息并用新数据更新插入行
CREATE TRIGGER [BasicData.IPInfo.Gather]
ON [BasicData]
AFTER INSERT
AS
BEGIN
DECLARE @City VARCHAR(1000),
@Country VARCHAR(1000),
@IP VARCHAR(1000),
@ROWID UNIQUEIDENTIFIER
SELECT @IP=[IP],@ROWID=[ID] FROM [inserted]
SELECT @Country = [Country], @City= [City]
FROM [IPInfo] WHERE [IP] = @IP
IF (@City IS NOT NULL) AND (@Country IS NOT NULL)
BEGIN -- Never seems to fire
UPDATE [BasicData]
SET [IPCountry]=@Country,[IPCity]=@City
WHERE [ID] = @ROWID
END
ELSE
BEGIN -- Fired correctly
INSERT INTO [IPInfo.Missing] VALUES (@IP)
END
END
现在的问题是,它正确添加了丢失的 IP 信息(仅在丢失时),但是,它似乎并没有更新表,我错过了什么?
我已经用我能想到的所有可能的方式对其进行了调整......(我的触发器知识相当糟糕)
【问题讨论】:
-
我希望它在插入数据时触发,一旦插入,它应该立即更新它,这个 AFAIK 不需要更新触发器
-
那张桌子上有什么其他触发器。如果您将更新语句替换为插入到虚拟表中,那会起作用吗?尝试几种不同的方式来看看发生了什么
-
没有其他触发器,在虚拟桌子上它就像一个魅力
-
很奇怪。这应该没有什么区别,但是您可以将更新更改为 - update basicdata set country=b.country,city=b.city from basicdata a , ipinfo b where a.id=(select id from inserted) 和 a。 ip=b.ip
-
任何可能阻止此触发器的表/用户权限?你说假桌子就像一个魅力。您的帐户是否有任何权限限制?