SQLite AFTER UPDATE触发器重命名相同的文件名

时间:2018-04-22 12:43:46

标签: sqlite triggers sql-update

我将一些文件信息存储在DB中,并通过sql生成文件名。

我正在更新所有行:

UPDATE contacts_New SET PhotoName=PersonName||'_'|| Date

问题是,我想重命名重复,如:

    Person1_Date -> Person1_Date
    ........
    Person2_Date -> Person2_Date
    Person2_Date -> Person2_Date-2
    Person2_Date -> Person2_Date-3
    Person2_Date -> Person2_Date-4
    ........
    Person10_Date -> Person10_Date

我尝试使用UPDATE TRIGGER:

CREATE TRIGGER ReNamePhotoNames UPDATE OF PhotoName ON contacts_New for each row
  BEGIN
    UPDATE contacts_New SET PhotoName=PhotoName || '-' || (SELECT count(*)+1 from contacts_New where PhotoName=new.PhotoName) WHERE (PhotoName=new.PhotoName);
  END;

结果:

Person1_Date -> Person1_Date
........
Person2_Date -> Person2_Date
Person2_Date -> Person2_Date-2
Person2_Date -> Person2_Date-2
Person2_Date -> Person2_Date-2
........
Person10_Date -> Person10_Date

我该如何解决这个问题?

非常感谢!

1 个答案:

答案 0 :(得分:0)

我解决了问题:

            DROP TRIGGER IF exists ReNamePhotoNames;
            CREATE TRIGGER ReNamePhotoNames AFTER UPDATE OF PhotoName ON contacts_New for each row
              BEGIN
                UPDATE contacts_New SET PhotoName =
                    new.PhotoName || 
                    CASE WHEN 
                        (SELECT count(*) from contacts_New where (PhotoName LIKE new.PhotoName ||'%')) > 1 
                    THEN 
                        (SELECT count(*) from contacts_New where (PhotoName LIKE new.PhotoName ||'%')) 
                    ELSE '' END || '.jpg'
                WHERE ((PhotoName LIKE new.PhotoName) AND (IFNULL(PhotoCreated,'') IS NOT ''));
              END;