【问题标题】:SQL Server Maximum Stored Procedure Limit issueSQL Server 最大存储过程限制问题
【发布时间】:2019-06-07 09:49:20
【问题描述】:

在 SQL Server 中创建触发器后出现以下错误,我研究了此错误并尝试了很多不同的方法,但没有任何效果。

Microsoft OLE DB Provider for SQL Server 错误“80040e14”最大值 超出存储过程、函数、触发器或视图嵌套级别 (限制 32)

USE [admin_W4F]
GO
/****** Object:  Trigger [lee2121].[discount]    Script Date: 6/7/2019     10:45:55 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [lee2121].[discount]
ON  [lee2121].[Cart]
AFTER INSERT,DELETE,UPDATE
AS 
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

update [lee2121].Cart
set totalprice2 = [lee2121].[Cart].[price] - ([lee2121].[Cart]. [price]/[lee2121].[Cart].[disc])

END

【问题讨论】:

  • 看来您可能设置了RECURSIVE_TRIGGERS 数据库选项,因此更新会再次调用触发器。此外,您的 UPDATE 每次触发时都会更新表中的每一行。

标签: sql sql-server oledb


【解决方案1】:

不要为此使用触发器!只需使用计算列:

alter table [lee2121].[Cart]
    add totalprice2 (price - (price / disc);

查询表时会计算该值。这些值将始终是最新的。

【讨论】:

  • 计算列听起来是个不错的选择,我输入了你的代码,但它不喜欢它,所以我要对计算列做一些研究,并尝试找出如何编写公式,谢谢你。
【解决方案2】:

看起来您的触发器正在触发您的触发器?尝试添加 NOT FOR REPLICATION

【讨论】:

    【解决方案3】:

    所以最后我使用了一个似乎工作正常的计算列,我使用了这段代码;

    ([价格]-[价格]/[光盘])

    谢谢。

    【讨论】:

      猜你喜欢
      • 2011-11-07
      • 2012-04-18
      • 2013-08-14
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      相关资源
      最近更新 更多