Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 仅当从触发器调用时,存储过程才会出错_Sql Server_Stored Procedures_Triggers - Fatal编程技术网

Sql server 仅当从触发器调用时,存储过程才会出错

Sql server 仅当从触发器调用时,存储过程才会出错,sql-server,stored-procedures,triggers,Sql Server,Stored Procedures,Triggers,我正在使用SQL Server编程一些由更新触发的东西,即使是在表中 结构如下:在触发器中,我有: EXEC StoredProcedure1 在StoredProcedure1中,我有: 有趣的是,只有当我从触发器调用存储过程时,它才会出错,违反主键错误PremiseId为unique PK。如果我1单独运行该存储过程,或者2从另一个存储过程调用它,则该存储过程运行良好 此外,我单独运行了查询,发现根本没有重复的密钥 有人能启发我吗 谢谢 在触发器中,您只需执行存储过程,而不需要任何上下文,

我正在使用SQL Server编程一些由更新触发的东西,即使是在表中

结构如下:在触发器中,我有:

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));