table 1 :J'ai une 1er table dont les colonnes sont un TIMESTAMP datetime, un STRING varchar et autres qui ne m'interrressent pas
ID TIMESTAMP flag1 flag2 STRING flag status
1 04/11/2008 17:23:05 0 0 12;124;000012.400000;000001.000000;000000.000000;000000.000000;000000.000000;000000.000000;H;-000000.997558 { } {ok}
2 04/11/2008 17:23:10 0 0 13;125;000012.400000;000001.000000;000000.000000;000000.000000;000000.000000;000000.000000;H;-000000.996337 { } {ok}
3 04/11/2008 17:23:15 0 0 ;;000012.400000;000001.000000;000000.000000;000000.000000;000000.000000;000000.000000;H;-000000.997558 { } {ok}
4 04/11/2008 17:23:20 0 0 ;;000012.400000;000001.000000;000000.000000;000000.000000;000000.000000;000000.000000;H;-000000.997558 { } {ok}
5 04/11/2008 17:23:25 0 0 ;;000012.400000;000001.000000;000000.000000;000000.000000;000000.000000;000000.000000;H;-000000.997558 { } {ok}
6 04/11/2008 17:23:30 0 0 ;;000012.400000;000001.000000;000000.000000;000000.000000;000000.000000;000000.000000;H;-000000.997558 { } {ok}
7 04/11/2008 17:23:35 0 0 ;;000012.400000;000001.000000;000000.000000;000000.000000;000000.000000;000000.000000;H;-000000.996337 { } {ok}
Table 3 (final) J'ai besoin de faire une autre table en éclatant la valeur STRING en plusieurs colonnes comme suivant
D'autre par la table 1 évolue en permanance, je dois donc ajouter que les nouveaux enregistrement dans la table 3 à chaque évolution de la table 1TIMESTAMP val1 val2 val3 val4 val5 val6 val7 val8 val9 val10
04/11/2008 17:23:05 12 124 000012.400000 000001.000000 000000.000000 000000.000000 000000.000000 000000.000000 H -000000.997558
04/11/2008 17:23:10 13 125 000012.400000 000001.000000 000000.000000 000000.000000 000000.000000 000000.000000 H -000000.996337
04/11/2008 17:23:15 NULL NULL 000012.400000 000001.000000 000000.000000 000000.000000 000000.000000 000000.000000 H -000000.996337
04/11/2008 17:23:20 NULL NULL 000012.400000 000001.000000 000000.000000 000000.000000 000000.000000 000000.000000 H -000000.996337
04/11/2008 17:23:25 NULL NULL 000012.400000 000001.000000 000000.000000 000000.000000 000000.000000 000000.000000 H -000000.996337
04/11/2008 17:23:30 NULL NULL 000012.400000 000001.000000 000000.000000 000000.000000 000000.000000 000000.000000 H -000000.996337
04/11/2008 17:23:35 NULL NULL 000012.400000 000001.000000 000000.000000 000000.000000 000000.000000 000000.000000 H -000000.996337
la table 2 est une table temporaire de travail
j'ai fais bcp de tests mais sans résultat positif voici le dernier en date
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
62
63
64
65
66
67
68
69
70
71 DECLARE @var1 varchar(20), @var2 varchar(20), @var3 varchar(20), @var4 varchar(20), @var5 varchar(20), @var6 varchar(20), @var7 varchar(20), @var8 varchar(20), @var9 varchar(20), @var10 varchar(20),@separateur varchar(1); DECLARE @position_p int; DECLARE @position_s int; DECLARE @cpt int; SET @position_p=1; SET @position_s=1; SET @var1=''; SET @var2=''; SET @var3=''; SET @var4=''; SET @var5=''; SET @var6=''; SET @var7=''; SET @var8=''; SET @var9=''; SET @var10=''; SET @separateur=';'; SET @cpt=1; drop table #table2 create table #table2 (temps datetime, valeur varchar(250)) insert into #table2 SELECT B.TIMESTAMP ,B.VALUE from master.dbo.table1 B WHERE (B.TIMESTAMP>(select TOP(1) table3.TIMESTAMP from table3 ORDER table3.TIMESTAMP DESC)) OR ((select TOP(1) table3.TIMESTAMP from table3 ORDER BY table3.TIMESTAMP DESC) IS NULL) declare curseur CURSOR for SELECT * from #table2 OPEN curseur FETCH curseur into @var1, @var2 while @@FETCH_STATUS =0 begin while @cpt<=10 begin SELECT @position_s = charindex(@separateur,valeur,@position_p)from #table2 IF @cpt=1 begin IF @position_s = @position_p + 1 SET @var1 = NULL; ELSE SELECT @var1 = SUBSTRING (valeur,@position_p, @position_s - @position_p)from #table2 end IF @cpt=2 begin IF @position_s = @position_p + 1 SET @var2 = NULL; ELSE SELECT @var2 = SUBSTRING (valeur,@position_p, @position_s - @position_p)from #table2 end SET @position_p = @position_s + 1 SET @cpt = @cpt + 1 end select temps,@var1,@var2 from #table2 FETCH NEXT from curseur end CLOSE curseur DEALLOCATE curseur
Partager