Avatar billede weje Nybegynder
01. april 2003 - 16:34 Der er 7 kommentarer og
2 løsninger

Trigger på hver

Hej

INSERT INTO    [NEWDB].[dbo].[UUser]([Username],[Password],[Email])
SELECT    [Username], [Password], [Email]
FROM    [OLDDB].[dbo].[KBUser]

Det her tager alle brugere fra den gamle db og kopiere dem til den nye, fint nok, men jeg har en trigger på den nye tabel, som skal udføres på hver ny record.. men når jeg gør det, udføres triggeren kun på den sidste record :-(

Hvordan får jeg den til at hente alle brugere og så sætte dem ind i den nye enkeltvis..

/Weje
Avatar billede Slettet bruger
01. april 2003 - 21:46 #1
inserted i triggeren indeholder alle de poster som du indsætter med den sætning så du skal nok lave noget loop så du får udført din trigger på alle.
Skriv evt. koden til triggeren her så kan det være at nogen kan hjælpe med det :-)
Avatar billede weje Nybegynder
01. april 2003 - 21:59 #2
ok, det her er den nye tabel, og den Trigger der hører til.

/***** Table UUser *****/
IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[UUser]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
CREATE TABLE [UUser](
    [idUUSer]    int        NOT NULL    IDENTITY (1,1),
    [Username]    nvarchar(50)    NOT NULL,
    [Password]    nvarchar(50)    NOT NULL,
    [Email]        nvarchar(50)    NULL,
    [Created]    datetime    NOT NULL,
    [CreatedBy]    int        NOT NULL    DEFAULT(1),
    [Updated]    datetime    NOT NULL,
    [Updatedby]    int        NOT NULL    DEFAULT(1),
    [idObject]    int        NULL,
PRIMARY KEY ([idUUser]))
END
Exec sp_bindefault 'Date', '[UUser].Created'
Exec sp_bindefault 'Date', '[UUser].Updated'
GO

    CREATE TRIGGER [TRG_UUser_Ins] ON [UUser]
    FOR INSERT
    AS
    DECLARE
    @id int,
    @idObject int
   
    SELECT @id = idUUser
    FROM inserted
   
    INSERT INTO Object (DocRef) VALUES (1)
   
    SELECT @idObject = @@Identity
   
    UPDATE [UUser]
    SET idObject = @idObject
    WHERE idUUser = @id

    INSERT INTO [Object_Right]([idObject_Control],[idObject_Item],[idRight],[idStatus]) VALUES (1,@idObject,1,1)
    INSERT INTO [Object_Right]([idObject_Control],[idObject_Item],[idRight],[idStatus]) VALUES (1,@idObject,2,1)

    INSERT INTO [Object_Right]([idObject_Control],[idObject_Item],[idRight],[idStatus]) VALUES (@idObject,@idObject,1,1)
    INSERT INTO [Object_Right]([idObject_Control],[idObject_Item],[idRight],[idStatus]) VALUES (@idObject,@idObject,2,1)
GO
Avatar billede weje Nybegynder
02. april 2003 - 12:33 #3
Sætter flere point af.

De sidste 4 linjer gør at brugeren får adgang til sig selv og at admin (object 1) får adgang til brugeren.

/Weje
Avatar billede weje Nybegynder
03. april 2003 - 11:09 #4
ok, prøver med flere point.

/Weje
Avatar billede janus_007 Nybegynder
03. april 2003 - 22:46 #5
Du laver bare en trigger der render alle poster igennem i din UUser tabel hvor idObject IS NULL !!

Jeg gør udfra at den er null el.lign. som default iogmed du skal opdatere den (ellers kan du bruge en anden følsom kolonne til det samme)
Avatar billede janus_007 Nybegynder
03. april 2003 - 22:54 #6
Du kunne jo evt. også efter du har overført dem i den nye tabel, bare udføre dine sql'er manuelt og så bagefter sætte triggeren til igen for at bevare integriteten !
Avatar billede weje Nybegynder
04. april 2003 - 11:12 #7
Eksempel?

/Weje
Avatar billede janus_007 Nybegynder
04. april 2003 - 13:39 #8
Efter du har overflyttet dine data uden trigger!!

INSERT INTO Object_Right([idObject_Control],[idObject_Item],[idRight],[idStatus]) SELECT 1, idUUSer, 1, 1 FROM UUser

INSERT INTO Object_Right([idObject_Control],[idObject_Item],[idRight],[idStatus]) SELECT 1, idUUSer, 2, 1 FROM UUser

INSERT INTO Object_Right([idObject_Control],[idObject_Item],[idRight],[idStatus]) SELECT idUUSer, idUUSer, 1, 1 FROM UUser

INSERT INTO Object_Right([idObject_Control],[idObject_Item],[idRight],[idStatus]) SELECT idUUSer, idUUSer, 2, 1 FROM UUser

INSERT INTO Object (DocRef) SELECT idUUSer FROM UUser

UPDATE UUser SET UUser.idObject = Object.identity
FROM UUser INNER JOIN Object ON UUser.idUUser = Object.DocRef

UPDATE Object SET DocRef = 1

Det skulle klare det, jeg ved ikke hvad din identity column i Object hedder, men den kan du selv lige skifte ud hvor der står: Object.identity

Og vær opmærksom på at column DocRef gerne skulle kunne indeholde en identity midlertidigt :O)

Det burde klare det !!

Og ja en cursor kunne også ha gjort det, but I hate cursors. En cursor er kun noget man bruger hvis man ikke lige har styr på sin SQL *GG* (næsten da)
Avatar billede weje Nybegynder
04. april 2003 - 15:10 #9
ok, nu virker det, skulle lige ændre lidt småting, men nu virker det efter hensigten.

/Weje
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester