mysql - 将 mySQL 触发器转换为 SQL

标签 mysql sql-server tsql

寻求帮助将此 mySQL 触发器转换为 TSQL。

CREATE TRIGGER IF not exists TF_WATCHLIST_PERSISTENCE_ADD_POSITION 
AFTER INSERT ON TF_WATCHLIST_PERSISTENCE
FOR EACH ROW
WHEN NEW.WATCHLIST_POSITION IS NULL
BEGIN 
    UPDATE TF_WATCHLIST_PERSISTENCE SET
    WATCHLIST_POSITION = (SELECT COUNT(*) - 1 FROM TF_WATCHLIST_PERSISTENCE WHERE WATCHLIST_USER = NEW.WATCHLIST_USER)
    WHERE rowid = NEW.rowid;
END;

最佳答案

感谢您的帮助

我最终得到了这个。

CREATE TRIGGER TF_WATCHLIST_PERSISTENCE_ADD_POSITION 
ON TF_WATCHLIST_PERSISTENCE
AFTER INSERT, UPDATE
AS
DECLARE @MyCursor CURSOR;
DECLARE @MyField_USER varchar(250);
DECLARE @MyField_ID varchar(250);
DECLARE @MyField_NewPos int

BEGIN 
SET @MyCursor = CURSOR FOR 
SELECT      WATCHLIST_USER
        ,   WATCHLIST_ID
FROM    inserted
WHERE inserted.WATCHLIST_POSITION is null

OPEN @MyCursor 
FETCH NEXT FROM @MyCursor
INTO @MyField_USER,  @MyField_ID

WHILE @@FETCH_STATUS = 0

BEGIN 
    set @MyField_NewPos = (SELECT MAX(WATCHLIST_POSITION) + 1 FROM TF_WATCHLIST_PERSISTENCE WHERE WATCHLIST_USER = @MyField_USER)
    print @MyField_NewPos

    update TF_WATCHLIST_PERSISTENCE 
        SET WATCHLIST_POSITION = ISNULL(@MyField_NewPos,0)
        WHERE       WATCHLIST_USER = @MyField_USER 
            AND     WATCHLIST_ID = @MyField_ID
            AND     WATCHLIST_POSITION IS NULL 

        Print @MyField_USER 
        Print @MyField_ID
        FETCH NEXT FROM @MyCursor
        INTO @MyField_USER,  @MyField_ID
END;


END;
CLOSE @MyCursor

关于mysql - 将 mySQL 触发器转换为 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46783018/

相关文章:

c# - datatable constraintsexception发生在dt.load(reader)时

php - LOAD DATA INFILE 父子表和外键关系

sql - 如何在一个查询中统计2个不同的数据

mysql - Jpa ManyToMany 关系不起作用

mysql - 如何处理用户个人资料字段的隐私?

sql-server - 如何在SSIS数据流中再添加一条路径

sql-server - 中止违反外键约束的存储过程

sql - 使用 tSQL 计算一行中不同列的数量

sql - 按顺序数字分组

sql-server - T-SQL 替代嵌套 CASE 以获得更好的性能?