Sql server 仅当从触发器调用时,存储过程才会出错
我正在使用SQL Server编程一些由更新触发的东西,即使是在表中 结构如下:在触发器中,我有:Sql server 仅当从触发器调用时,存储过程才会出错,sql-server,stored-procedures,triggers,Sql Server,Stored Procedures,Triggers,我正在使用SQL Server编程一些由更新触发的东西,即使是在表中 结构如下:在触发器中,我有: EXEC StoredProcedure1 在StoredProcedure1中,我有: 有趣的是,只有当我从触发器调用存储过程时,它才会出错,违反主键错误PremiseId为unique PK。如果我1单独运行该存储过程,或者2从另一个存储过程调用它,则该存储过程运行良好 此外,我单独运行了查询,发现根本没有重复的密钥 有人能启发我吗 谢谢 在触发器中,您只需执行存储过程,而不需要任何上下文,
EXEC StoredProcedure1
在StoredProcedure1中,我有:
有趣的是,只有当我从触发器调用存储过程时,它才会出错,违反主键错误PremiseId为unique PK。如果我1单独运行该存储过程,或者2从另一个存储过程调用它,则该存储过程运行良好
此外,我单独运行了查询,发现根本没有重复的密钥
有人能启发我吗
谢谢 在触发器中,您只需执行存储过程,而不需要任何上下文,因为哪些行受触发器的影响?这对我来说似乎很奇怪…你确定你的触发器只被调用一次,并且只执行同一个代码一次,而不尝试插入两行相同的代码吗?尝试调试或进行跟踪,插入一个计数或带有密钥的内容。SQL Server并不是为了好玩而编写此错误消息,因此,虽然您说根本没有重复的密钥,但您错了。
INSERT dbo.UnbalancedFreqStops
SELECT APremise AS PremiseID
,geography::ConvexHullAggregate(Location) AS Shape
FROM
(SELECT
A.[Premise ID] AS APremise, B.[Premise ID] AS BPremise,
B.LatLon AS Location, B.[Service Frequency] AS FreqT, B.Mon_Routed AS MonT,
B.Tue_Routed AS TueT, B.Wed_Routed AS WedT, B.Thu_Routed AS ThuT,
B.Fri_Routed AS FriT, B.Sat_Routed AS SatT, B.Sun_Routed AS SunT
FROM
dbo.Weekly AS A
INNER JOIN
dbo.Weekly AS B ON A.LatLon.STDistance(B.LatLon) <= (80 * 2)
) AS Clusters
GROUP BY
APremise
HAVING
MAX(FreqT) <> (MAX(MonT) + MAX(TueT) + MAX(WedT) + MAX(ThuT) + MAX(FriT) + MAX(SatT) + MAX(SunT));