Diskuze: Trigger BeforeInsert a Identity

PHP PHP Trigger BeforeInsert a Identity American English version English version

Avatar
Lunil
Člen
Avatar
Lunil:

Zdravim,
chcel by som sa spytat na jeden problemik, ktory mi stazuje robotu.
Jedna sa o trigger v MsSQL.
Nacrtnem modelovu situaciu :
Tabulka A ma IdA int, Meno nvarchar; kde ID je autoinkrement (Identity)
tabulka B ma IdB, IdA, Meno

Veskery "pruser" nastava, ked robim triger Before insert (ISTEAD INSERT) nad tabulkou A. Tento triger ma zabezpecit, ze riadok ktory pride do tab A ide aj do Tab B pod rovnakym IdA a toto je kamen urazu

Nacrtnem triger tvrobu :

ALTER TRIGGER trg_A_BeforInsert01
ON dbo.A
INSTEAD OF INSERT
AS
INSERT INTO dbo.A(Meno)
Selcet Meno from INSERTED

/**/

INSERT INTO dbo.B(IdA, Meno)
Selcet IdA,Meno from INSERTED

Lenze v takomto zapise sa stale na mieste IdA nachadza 0.
Nasiel som prikazy SCOPE_IDENTITY(); a @@IDENTITY, ktore by mi to mali riesit, ale stale to padne chybovou hlaskou, ze IdA sa nemoze zmenit napriklad :
SELECT * INTO #A FROM A
UPDATE #A SET IdA = SCOPE_IDENTITY() / @@IDENTITY
ani jedna moznost nepresla spravne.

Ako mam spravit takyto trigger? V napriklad FireBird databaze sa clovek odvola na generator a ten mu cislo vrati a aj bezi 10 naraz tranzakcii tak kazdy dostane unikatne cislo. Lenze tu si nejako neviem pomoct.

veskere veci v priklade, ktore som pouzil som si nasiel na nete, kedze v tomto prostedi robim hodne kratko. Ak som napisal nejaku blbost (ze takyto sposob nie je na to urceny, kludne napiste, rad sa priucim :) )

Odpovědět 8.4.2013 10:29
Neustalym resetovanim pocitaca ho dovedieme do pozadovaneho stavu. O:-)
Avatar
Lunil
Člen
Avatar
Lunil:

Edit pre uprestnenie, lebo sa to da dvojmo pochopit
IdA v tab A ma spravnu hodnotu, zvecsije sa 1, 2, 3 atd ...
IdA v tab B ma stale hodnotu 0

Nahoru Odpovědět 8.4.2013 12:35
Neustalym resetovanim pocitaca ho dovedieme do pozadovaneho stavu. O:-)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.