Hello, je cherche a "traduire" ce trigger d'Oracle en Sql Server :
create or replace trigger T_ADRESSE
before insert on ADRESSE for each row
begin
select ID_ADRESSE.nextval into :new.ID_ADRESSE from dual;
end;
/
Merci a tous
Lois
Version imprimable
Hello, je cherche a "traduire" ce trigger d'Oracle en Sql Server :
create or replace trigger T_ADRESSE
before insert on ADRESSE for each row
begin
select ID_ADRESSE.nextval into :new.ID_ADRESSE from dual;
end;
/
Merci a tous
Lois
Salut,
Oracle ne gère pas les champs de type Auto Increment de manière automatique, mais SQL Server si : donc pourquoi ne pas déclarer ton champ T_ADRESSE.ID_ADRESSE en auto-Increment ?
SQL Server ne possède pas de trigger BEFORE et ne permet pas dans un trigger de jouer le code FOR EACH ROW, sauf à coder à l'aide d'un curseur.
De plus les séquenceurs n'existent pas dans SQL Server.
Mais comme l'a judicieusement fait remarqué Xo (qui doit être un alcoolique notoire, accro au cognac vu son pseudo ;-) ) c'est inutile sous SQL Server car il suffit d'utiliser la propriété IDENTITY dans la définition d'une colonne pour la faire devenir auto incrémentée.
A +
Bonjour, j'ai moi aussi un problème du genre. Je dois convertir ce trigger oracle (que je n'ai pas écris moi-même) pour sql server. Je ne sais pas comment faire... La moitié des mots clés d'oracle n'existent pas en SQL server. Est ce que quelqun peut m'aider svp ? Merci
Voici le code du Trigger :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 CREATE OR REPLACE TRIGGER flg_modif_param_critere AFTER INSERT OR DELETE OR UPDATE ON critere REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW DECLARE sRetour VARCHAR(10) := null; BEGIN IF INSERTING THEN ----------------- PKG_TRACE.logdansfichier('Trig CRITERE::INSERTING '||TO_CHAR(:NEW.IDT_CRITERE),'C:\Database\SUMOBLV\LOG\','TraceLOT4.txt','A'); BEGIN EXECUTE IMMEDIATE 'TRUNCATE TABLE BROUIL_SEL_ELEMENT_STATUS'; EXECUTE IMMEDIATE 'TRUNCATE TABLE SEL_ELEMENT_STATUS'; EXCEPTION WHEN OTHERS THEN PKG_TRACE.logdansfichier('Trig CRITERE::INSERTING err'||sqlcode,'C:\Database\SUMOBLV\LOG\','TraceLOT4.txt','A'); null; END; END IF ; IF UPDATING THEN ---------------- BEGIN EXECUTE IMMEDIATE 'TRUNCATE TABLE BROUIL_SEL_ELEMENT_STATUS'; EXECUTE IMMEDIATE 'TRUNCATE TABLE SEL_ELEMENT_STATUS'; EXCEPTION WHEN OTHERS THEN null; END; END IF ; IF DELETING THEN ---------------- PKG_TRACE.logdansfichier('Trig CRITERE::DELETING','C:\Database\SUMOBLV\LOG\','TraceLOT4.txt','A'); BEGIN EXECUTE IMMEDIATE 'TRUNCATE TABLE BROUIL_SEL_ELEMENT_STATUS'; EXECUTE IMMEDIATE 'TRUNCATE TABLE SEL_ELEMENT_STATUS'; EXCEPTION WHEN OTHERS THEN null; END; END IF ; End ;
Je prends en général 800 € HT / jour pour faire ce genre de boulot...
Veuillez contacter mon entreprise : www.sqlspot.com.
Sincères salutations
euh oui....
Mais en fait, je préfèrerais avoir des pistes pour pouvoir le traduire moi-même...
Par exemple, j'ai vu que le "OR replace " n'existe pas en T-SQL. Y a-t-il un moyen pour remplacer le trigger ?
Pour le "For eache row", apparemment il faudrait que j'utilise un curseur, si j'ai bien suivi les réponses précédentes.
Mais par exemple, ma clause REFERENCING, que devient-'elle ? elle ne semble pas exister avec SQL Server...