Avatar billede donnib Nybegynder
17. september 2003 - 13:05 Der er 10 kommentarer og
1 løsning

Kopier rows fra tabel TRIGGER ?

Hej alle,
Jeg har to tabeller. En med nogle informationer (den kalder vi localized) som referrer til den anden tabel som indeholder nogle sprog. Lad os nu sige jeg har 4 records i Localized tabellen som alle refererer til samme sprog i tabellen sprog og dette er sproget engelsk. Jeg vil nu gerne lave en trigger som ved indsættelse af et nyt sprog i tabellen Sprog kan kopiere alle de rows som eksisterer i tabellen Localized og som peger på sproget engelsk og indsætte dem i samme tabel men nu skal de pege på den nye sprog. Håber jeg har forklaret det rigtig nok eller må i spørge og så må jeg tegne det eller forklare det bedre.

donnib
Avatar billede ocp Nybegynder
17. september 2003 - 15:11 #1
create trigger tr_ins_Language
on sprog
as
  declare @sprog varchar(50)

  select @sprog = felt1 from inserted

  insert into localized
  select felt1,felt2,@sprog
  from  sprog
  where  sprog.language = 'engelsk'
Avatar billede ocp Nybegynder
17. september 2003 - 15:11 #2
UPS... Glemte typen:

create trigger tr_ins_Language
on sprog
for insert
as
  declare @sprog varchar(50)

  select @sprog = felt1 from inserted

  insert into localized
  select felt1,felt2,@sprog
  from  sprog
  where  sprog.language = 'engelsk'
Avatar billede donnib Nybegynder
17. september 2003 - 15:21 #3
Jamen okey det kunne godt ligne noget men hvis der er flere records i Localized så vil den kun kopiere den første ik ?

donnib
Avatar billede ocp Nybegynder
17. september 2003 - 15:23 #4
Nej, den tager samtlige der matcher selectet og inserter
Avatar billede donnib Nybegynder
17. september 2003 - 15:44 #5
okey men kan du hælpe mig lidt videre. Jeg tror ikke jeg er helt med. Mine to tabeller ser sådan ud.

Language:
LanguageID //Primary key
LanguageName //varchar
Descript //varchar
Created //har default værdier så de skal ikke udfyldes
Modified //har default værdier så de skal ikke udfyldes

Localized:
ApplicationID  //foreign key af typen smallint
VersionID //foreign key af typen smallint
LanguageID //foreign key (til language tabellen) af typen smallint
ResourceID //foreign key af typen smallint
ResourceValue //typen er varchar
Created // har default værdier så de skal ikke udfyldes
Modified // har default værdier så de skal ikke udfyldes

Som jeg har fortalt før skal alle de records som er i Localized og peger på engelsk som har et LanguageID = 1 kopieres til Localized igen men den eneste ændring skal være at recordsene skal nu pege på den LanguageID.

Et eksempel:

Language tabellen har følgende records :

1, English, English Language, 08/09/03, NULL

Localized tabellen har følgende records :

1,1,1,1, pause, 08/09/03, NULL
1,1,1,2, start, 08/09/03, NULL
1,1,1,3, stop, 08/09/03, NULL
1,1,1,4, play, 08/09/03, NULL

Efter et tilføjet sprog som denne :

2, German, German Language, 09/09/03, NULL

Skal tabellen Localized se sådan her ud :

1,1,1,1, pause, 08/09/03, NULL
1,1,1,2, start, 08/09/03, NULL
1,1,1,3, stop, 08/09/03, NULL
1,1,1,4, play, 08/09/03, NULL
1,1,2,1, pause, 08/09/03, NULL
1,1,2,2, start, 08/09/03, NULL
1,1,2,3, stop, 08/09/03, NULL
1,1,2,4, play, 08/09/03, NULL

Hvordan vil min trigger så se ud med de ekstra informationer. Håber du kan hjælpe mig.

donnib
Avatar billede ocp Nybegynder
17. september 2003 - 15:56 #6
Ja, men først senere...
Avatar billede donnib Nybegynder
17. september 2003 - 15:58 #7
ok fair nok.
Avatar billede donnib Nybegynder
17. september 2003 - 21:29 #8
ocp har du glemt mig :( ????
Avatar billede ocp Nybegynder
17. september 2003 - 23:01 #9
Nej da - jeg har haft gæster
Avatar billede ocp Nybegynder
17. september 2003 - 23:05 #10
Sådan... det skulle kunne gøre det:

create trigger tr_ins_Language
on sprog
for insert
as
  declare @sprog int

  select @sprog = languageid from inserted

  insert into localized
  select applicationid,
    versionid,
    @sprog,
    resourceid,
    resourcevalue
  from  Language
  where  languageid = 1
Avatar billede donnib Nybegynder
19. september 2003 - 12:52 #11
Tusind tak for din hjælp. Alt fungerede fint med nogle små ændringer. Sådan sår triggeren ud til sidst :

CREATE TRIGGER tr_ins_Language
ON language
FOR INSERT
AS
  DECLARE @Language smallint

  SELECT @Language = LanguageID FROM inserted

  INSERT INTO     Localized(ApplicationID,VersionID,LanguageID,ResourceID, ResourceValue)
  SELECT     Localized.ApplicationID,
            Localized.VersionID,
        @Language,
        Localized.ResourceID,
        Localized.ResourceValue
  FROM Localized, Language
  WHERE Language.LanguageName = 'English'
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