Avatar billede soulmaker Nybegynder
17. februar 2004 - 18:04 Der er 7 kommentarer

Konvertering af Oracle Script til MS SQL

Hejsa

Vi kører både med Oracle DB'er og MS SQL DB'er.
Problemet er at vi desværre ikke kender så meget til SP i MS SQL.
Er der en måde på hvorledes man kan konvertere dette script fra Oracle til brug ved MS SQL ved hjælp af SP, idet der mig bekendt ikke findes en form for "SEQUENCE" funktion i MS SQL...

Håber der er nogle der vil kunne hjælpe, da jeg selv er gået i stå... :(

Således ser Oracle Scriptet ud... :

-- Script for automatic creation of "protection" multi field on projects.

-- CREATE TABLE PRJTMP (PRJ_ID INT NOT NULL, PSP_ID INT NOT NULL)

-- CREATE TABLE PRJTMP2 (PRJ_ID INT NOT NULL, PSP_ID INT NOT NULL)

-- CREATE SEQUENCE MUL_SEQ INCREMENT BY 1 START WITH 22500000

-- We have identified and reserved a free id number interval from 22.500.000 to 22.999.999

-- The above interval may thus NOT be used for any new Mobile sites !!! But can be used
-- for any other similar solution.

Set echo on

spool D:\Scripts\prjtemp.log


Insert into PRJTMP
    select     REF_ID,
        PSP_ID
from Multi
where ref_prefix = 'PRJ' and mulcode = 'BLOCK';


Insert into PRJTMP2
    select
        PROJECT.PRJ_ID,
        PROJECT.PSP_ID
    from project
where project.prj_id > '10000000'
and project.prj_id not in (select prj_id from prjtmp);


-- ('05','10','20','30','40','45','50','55','58','90','91','99')


Insert into Multi
Select
    Mul_Seq.Nextval,
    PRJTMP2.PSP_ID,
    'PRJ',
    PRJTMP2.PRJ_ID,
    'Z_BLOCK',
    'BLOCK',
    'BLOCK',
    ' ',
    ' ',
    ' ',
    ' ',
    TO_DATE(SYSDATE, 'DD-MON-YY'),
          'KFR',
          TO_DATE(SYSDATE, 'DD-MON-YY'),
          'KFR'
from PRJTMP2;

commit;

Truncate table prjtmp;
Truncate table prjtmp2;

spool off

commit;

exit
Avatar billede trer Nybegynder
17. februar 2004 - 18:15 #1
Du definerer tabellerne som du allerede har.

Sekvensen kan du droppe - istedet laver du definitionen i tabel multi om så sekvenskolonnen er defineret som en

  INT IDENTITY(1,22500000) NOT NULL 

Og så undlader du at angive nogen data til den - og angiver kolonne liste i indsættelsen.

TO_DATE(SYSDATE,'DD-MON-YY') erstatter du med GETDATE()

Øvrigt burde ikke give problemer
Avatar billede soulmaker Nybegynder
17. februar 2004 - 18:33 #2
-> trer.
Jeg har givet info videre til vores DB mand, men har er desværre først hjemme fra arb. om ca. 2 timer...

Skal den køres som SP eller ?
Avatar billede trer Nybegynder
17. februar 2004 - 19:56 #3
eh,, ikke forstået.  Således

create table multi (
  sekvenskolonne int identity(1,22500000) not null,
  kolonne,
  kolonne,
  kolonne,
  ...
)

Insert into Multi (kolonne,kolonne,,,,kolonne)
Select
    PRJTMP2.PSP_ID,
    'PRJ',
    PRJTMP2.PRJ_ID,
    'Z_BLOCK',
    'BLOCK',
    'BLOCK',
    ' ',
    ' ',
    ' ',
    ' ',
    getdate(),
          'KFR',
          getdate(),
          'KFR'
from PRJTMP2
Avatar billede soulmaker Nybegynder
17. februar 2004 - 21:18 #4
jeg giver lige vores DBA'er dit info videre, vender tilbage så snart jeg har hørt fra ham...
Avatar billede soulmaker Nybegynder
18. februar 2004 - 10:33 #5
-> trer
Det er ikke muligt at re-definere tabellen 'Multi'...

Er der andre måder hvorpå man kan lave en lign. Oracle SEQUENCE i MS SQL ?
Avatar billede trer Nybegynder
18. februar 2004 - 10:49 #6
Umiddelbart ikke når du skal bruge det som ovenfor.  Løsningen er, at du laver en midlertidig tabel med samme opbygning som multi, men med et identity felt.

Så indsætter du i den istedet for i multi, og slutter så med at overføre fra den til multi.
Avatar billede soulmaker Nybegynder
18. februar 2004 - 15:52 #7
Jeg be'r dem lige teste den med 'MultiTMP'

Jeg vender tilbage så hurtigt som muligt :)
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