Autor Téma: Trigget - After Insert -> INSERT INTO  (Přečteno 231 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3350
  • Karma: 34
    • Verze Delphi: XE7 professional
Re:Trigget - After Insert -> INSERT INTO
« Odpověď #15 kdy: 20-06-2018, 16:12:59 »

Citace
Nevim, Nemam cas ani chut to zkouset, ale pri replikaci mez DB jsem pouzival tohle, takze mozna ne, to bych asi new.* pouzil rovnou
Hore som písal, že to s * priamo nejde. Vloží všetky záznamy čo sú v tabuľke. Preto som aj spomínal, že to vidím na nový stĺpec, generátor a podmienku. Tak ako si to uviedol.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Hrdina
  • ****
  • Příspěvků: 429
  • Karma: 34
    • Verze Delphi: 10.2
Re:Trigget - After Insert -> INSERT INTO
« Odpověď #16 kdy: 20-06-2018, 16:29:04 »

Citace
Nevim, Nemam cas ani chut to zkouset, ale pri replikaci mez DB jsem pouzival tohle, takze mozna ne, to bych asi new.* pouzil rovnou
Hore som písal, že to s * priamo nejde. Vloží všetky záznamy čo sú v tabuľke. Preto som aj spomínal, že to vidím na nový stĺpec, generátor a podmienku. Tak ako si to uviedol.

Pleteš dvě věci dohromady. Hvězdička znamená "všechny sloupce".
To, že se Ti zkopírovaly pokaždé všechny řádky, je proto, že v tom INSERT SELECT... jsi zapomněl použít WHERE, aby ten SELECT vrátil jen záznam, který byl aktuálně přidán.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2125
  • Karma: 114
    • Verze Delphi: D2007, XE3, DX10
Re:Trigget - After Insert -> INSERT INTO
« Odpověď #17 kdy: 20-06-2018, 17:47:59 »
To, že se Ti zkopírovaly pokaždé všechny řádky, je proto, že v tom INSERT SELECT... jsi zapomněl použít WHERE, aby ten SELECT vrátil jen záznam, který byl aktuálně přidán.
Nooo, ja ziju v domneni, ze kontextova promenna new odpovida vkladanemu radku a pak by new.* mohlo (jak zpochybnil Delfin) vratit vsechna pole, ale nemelo by to vracet vsechny zaznamy - to jenom v pripade, ze by new chybelo. A pak pri pouziti by nemel potrebovat WHERE klauzuli. To jedine v pripade, jak jsem to delal ja, ze si sahnu pro zaznam new.ID, ale protoze uz je to hafo let, tak si nepamatuju, proc jsem to tak udelal, jestli ze to nejde nebo jestli jsem nechal nejdriv dobehnout vsechny triggery (muj byl vzdycky jako posledni)

Offline KarelHorky

  • Plnoletý
  • ***
  • Příspěvků: 171
  • Karma: 7
    • Verze Delphi: 7, XE6
Re:Trigget - After Insert -> INSERT INTO
« Odpověď #18 kdy: 21-06-2018, 08:40:37 »
Aby select vrátil jen vložený záznam, jde např. takto:

select * from tabulka where id = new.id;

Ale to bude zbytečně procházet celou tabulku, třeba při 5 milionech záznamů to nějakou chvíli potrvá.
Raději použít alias new, ten rovnou obsahuje kompletní nový záznam.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: