2016-03-27 13 views
0

Tablo var: MYTABLE (ID int); Düzgün çalışırSqlite rowid> çok fazla tetikleme seviyesi var, ancak tetikleyici iyi çalışıyor mu?

create trigger mytrigger after insert on MYTABLE 
    when new.id < 1000 
    begin 
    insert into MYTABLE select max(id)+1 from MYTABLE; 
    end; 
    insert into MYTABLE values (1); 

ben subsitute zaman, sqlite 1000

bana 1'den bir rowid oluşturmak Ama olur:

ben mytable içinde ROWIDs N sayılar üretmek için bu sorguyu kullanıyorum

ile
when new.id < 1000 

büyük bir sayı gibi:

when new.id < 10000000 

bir hata alırsınız: tetik özyineleme çok fazla seviyeleri

Şimdi benim sorum, en az bir milyon seçenek işleyemezse tetikleyici ne anlamı var mı? Bunu çözmek için herhangi bir yol var mı yoksa gidip her satırı tek başıma eklemeliyim :)

+0

. Zaten neden tetikleyici olmalı? –

+0

Eh, en basit çözüm olabileceğini düşündüm, ama tabi ki her şey için açıkım. – mssqlw

+0

Simples çözümü * ne *? Bu tetikleyici ile ne tür bir problemi çözüyorsun? –

cevap

1

Tetikleyicilerin keyfi bir özyinelemeye sahip olmaları amaçlanmamıştır.

rasgele recursions mekanizması

recursive common table expressions şunlardır: Tetikleyiciler yineleme rasgele bir seviyesine sahip olduğu anlamına gelmez

INSERT INTO MyTable(id) 
WITH RECURSIVE n(i) AS (
    SELECT 1 
    UNION ALL 
    SELECT i + 1 FROM n WHERE i < 1000 
) 
SELECT i FROM n; 
+0

Lol, çok basit, çok harika. Çok teşekkür ederim. – mssqlw

İlgili konular