Avatar billede dd_ns Nybegynder
15. januar 2003 - 12:43 Der er 9 kommentarer

afvikle IF THEN ELSE i en dts fætter...

JEg har en dts pakke der fjerner nogle tabeller på den ene server og overføre dem igen fra en anden server...

FØR den gør det vil jeg gerne checke om et felt er blevet andret fra den ene til den anden... og i givet fald ændre noget i den ene database før jeg fortsætter med min DTS pakke...

Hvordan?
Avatar billede pierrehusted Nybegynder
15. januar 2003 - 13:03 #1
Jeg har haft samme problem - behov for IF THEN ELSE sætninger i DTS pakker.


Jeg har ikke kunnet finde en måde i DTS systemet, men har måttet ty til nogle forskellige fix-faxerier :

Metode 1)
Laver en VBS fil, der udfører de SQL kald der skal laves og returnerer en ERRORLEVEL.
Fra udførelsen af VBS filen har jeg så et ON FAILURE og et ON SUCCES WORKFLOW - den ene til det ene forløb og den anden til det andet forløb.

Der er dog de ulemper at pakken står som fejlet hvis den er kørt ad ON FAILURE sporet og det er ret besværligt at vedligholde VBS filen.


Metode 2)
Laver tre pakker: En der er starten, en med det ene forløb og en med det andet forløb.
I den pakke der starter det hele laver jeg så en ActiveX task med noget script det starter den ene eller den anden pakke alt efter de udførte SQL sætninger.

Der er dog den ulempe at den pakke man starter ikke står som fejlet hvis en af de kaldte pakker fejler.


Alt i alt har jeg ikke rigtig fundet den helt perfekte løsning...  Så jeg er også ret nysgerrig efter hvad andre har fundet på!
Avatar billede dd_ns Nybegynder
15. januar 2003 - 13:16 #2
Hej Pierre... Det er David Dollas her...

Nu da jeg ar blevet Microsoft Medarbejder, har jeg de vilde resourcer, så jeg arbejdet på sagen....

Men hvis jeg ikke har bruger for infomation omkring om den er fejlet eller ej, kan jeg vel entenlig bare bruge din metode 2
Avatar billede pierrehusted Nybegynder
15. januar 2003 - 13:59 #3
Ja, det kan du da.


Hvis du finder en mere "korrekt" metode, så må du meget gerne fortælle mig den - for begge mine metoder har jo fejl.
Avatar billede dd_ns Nybegynder
15. januar 2003 - 14:20 #4
hmm,, prøv lige at se her...

Jeg har str_date i en tabel i database A
og
Jeg har str_date i en tabel i database B


Jeg skal sammen ligne de 2 og hvis de er ens skal den gøre opgave_AAA
men hvis de ikke er ens skal den update et felt i en tabel i database A og derefter gøre opgave_AAA


Fik du den.-?
Avatar billede kichian Nybegynder
15. januar 2003 - 17:05 #5
Lav en linked server i den der skal kopieres fra, til den server der skal kopieres til. Så kan du via linket læse fra bla. sysobjects.
Dette sker som det første. Derefter er det vel bare at rulle derudaf.
Avatar billede janus_007 Nybegynder
15. januar 2003 - 23:18 #6
pierrehusteds metoder er vist lidt kringlekranglede *S*

Undgå DTS det er meget lidt performance venligt. Lav det evt. hellere i en SP og brug fullyqualified tablenames - eks. dbName.dbo.table1

evt. SELECT * INTO dbName.dbo.table1 FROM dbName1.dbo.table1, efter du har droppet dine tables..

ps. brug kun DTS som sidste udvej :O)

pss. hvis du har brug for hjælp til SP så skriv igen, det er ikke så svært!
Avatar billede pierrehusted Nybegynder
16. januar 2003 - 11:57 #7
Kan det ikke laves med rent SQL ??

Opgave_AAA skal udføres under alle omstændigheder.

Så updateringen gør du afhængig af om betingelsen er opfyldt.


Giver det mening ??
Avatar billede pierrehusted Nybegynder
16. januar 2003 - 11:58 #8
Forresten...  Hejsa David!!  :-)
Avatar billede janus_007 Nybegynder
16. januar 2003 - 12:42 #9
Hvem hulen har da slettet indholdet i mit tidligere svar...

hmm.. anyway! Undgå DTS det er alt for performance krævende, lav det hellere med en SP og brug SELECT * INTO efter du har droppet dit omtalte table, såfremt betingelserne er opfyldt.
Brug fullyqualified names sådan... dbname.dbo.tabelname


SELECT P.* INTO dbname.dbo.tablename FROM dbname1.dbo.tablename AS P

Såfremt dine db'er ligger på 2 servere bør du måske overveje replikering og bagefter udføre ovenstående.. Eller måske konfigurere din sourceserver som data access. Eller måske bruge openrowset...

Jeg plejer bare at bruge openrowset :O) - (dovenskab)
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