Sql server 使用相同表插入或更新SQL触发器避免递归

Sql server 使用相同表插入或更新SQL触发器避免递归,sql-server,recursion,triggers,Sql Server,Recursion,Triggers,我是一个SQL GUI类型的人,没有多少编写触发器的经验。我做了一些搜索,找到了下面的代码。我无法更改任何数据库级参数,也无法更改表方案。名为Myvalue的列将是数字,但有些列显示十进制值。我的目标是在insert或update时确保列Myvalue的值为整数。如果更新或插入十进制值,触发器将触发并删除该十进制值。下面的代码可以完成这项工作吗?我是否需要使用trigger_nestlevel命令来避免递归?如何测试以确保即使在插入或更新时有多行触发器也能运行一次 DROP TRIGGER IF

我是一个SQL GUI类型的人,没有多少编写触发器的经验。我做了一些搜索,找到了下面的代码。我无法更改任何数据库级参数,也无法更改表方案。名为Myvalue的列将是数字,但有些列显示十进制值。我的目标是在insert或update时确保列Myvalue的值为整数。如果更新或插入十进制值,触发器将触发并删除该十进制值。下面的代码可以完成这项工作吗?我是否需要使用trigger_nestlevel命令来避免递归?如何测试以确保即使在插入或更新时有多行触发器也能运行一次

DROP TRIGGER IF EXISTS 'Mytrigger'  
CREATE TRIGGER ON Table1  
AFTER insert, update  
AS  
BEGIN  
    IF TRIGGER_NESTLEVEL(OBJECT_ID('Mytrigger')) <= 1  
    BEGIN  
        set nocount on  
        UPDATE Mytable set Myvalue=substring(Myvalue,0,charindex('.',Myvalue))  
        FROM Mytable t  
        inner join inserted i on i.Myvalue like '%.%'  
    END    
END
DROP TRIGGER(如果存在)'Mytrigger'
在表1上创建触发器
插入后,更新
作为
开始

如果TRIGGER\u NESTLEVEL(OBJECT\u ID('Mytrigger')),它将显示为十进制值是什么意思?表中
myvalue
的数据类型是什么?myvalue数据类型是nvarchar(2000)。例如,该值始终是数字,如456、123或435.67。如果myvalue中的任何值为435.67,触发器将触发并将值435.67更改为435