Bonjour,

Lorsque je lui demande d'afficher la requete au lieu de l'executer (3° execute celui du prix) tout va bien mais lorsque je veux remplace le SELECT par EXECUTE, j'ai une erreur de CAST !!

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
EXECUTE ('INSERT INTO '+@table+' (colonnedescriptif,nombreannonce,colonnetype,prixmin,prixmax) '+
                            'VALUES (''de '+CAST(@PrixMin AS VARCHAR(10))+' à '+CAST(@PrixMax AS VARCHAR(10))+'€'','''+CAST(@Items AS VARCHAR(10))+''',''p'','''+CAST(@PrixMin AS VARCHAR(10))+''','''+CAST(@PrixMax AS VARCHAR(10))+''');');
Lorsque j'exécute dans une autre fenêtre le résultat sorti du select, ça enregistre bien.

Quelqu'un à une idée ?

Arnaud.

Voici la Procédure stockée complète :

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
72
73
74
75
SET NOCOUNT ON;
    DECLARE @table VARCHAR(20);
    DECLARE @i VARCHAR(3),@j INT;
    DECLARE @descriptif VARCHAR(50);
    DECLARE @PrixMin AS DECIMAL(10,2),@PrixMax AS DECIMAL(10,2);
    DECLARE @ItemPalier AS INT,@Items AS INT;
 
    DECLARE C_CP CURSOR 
        FOR 
            SELECT typebien_id,dbo.NettoyageURL(descriptif) FROM typebien;
        OPEN C_CP
 
        FETCH C_CP INTO @i,@descriptif
 
        WHILE @@FETCH_STATUS = 0
            BEGIN
                SET @table='moteur_textuel_b'+@i;
 
                IF (OBJECT_ID('dbo.'+@table) IS NULL)
                    BEGIN
                        EXECUTE ('CREATE TABLE [dbo].'+@table+'([mt_id] [bigint] IDENTITY(1,1) NOT NULL,[colonnedescriptif] [varchar](50) NOT NULL,'+
                            '[nombreannonce] [bigint] NULL,[colonnetype] [varchar](50) NOT NULL,'+
                            '[colonneidentifiant] [varchar](50) NULL,[colonneURL] [varchar](1024) NULL,'+
                            '[prixmin] [decimal](15, 2) NULL,[prixmax] [decimal](15, 2) NULL,CONSTRAINT [PK_MT_b'+@i+'] PRIMARY KEY CLUSTERED'+ 
                        '([mt_id] ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]'+
                        ') ON [PRIMARY]');
                    END
                ELSE
                    BEGIN
                        EXECUTE ('DELETE '+@table+';');
                    END
 
                --TRANSACTION
                EXECUTE ('INSERT INTO '+@table+' (colonneidentifiant,colonnedescriptif,nombreannonce,colonnetype,colonneurl) '+
                        'SELECT transaction_id,transaction_descriptif,COUNT(*),''t'',''http://www.visiteonline.fr/annonce-immobiliere/''+dbo.NettoyageURL(transaction_descriptif)+''-'+@descriptif+',''+CAST(transaction_id AS VARCHAR(2))+'','+@i+',0.htm'' ' +
                        'FROM moteur_textuel '+
                        'WHERE typebien_id='+@i+' GROUP BY transaction_id,transaction_descriptif;');            
                --REGION
                EXECUTE ('INSERT INTO '+@table+' (colonneidentifiant,colonnedescriptif,nombreannonce,colonnetype,colonneurl) '+
                        'SELECT region,region,COUNT(*),''l'',''http://www.visiteonline.fr/annonce-immobiliere/'+@descriptif+'-''+dbo.NettoyageURL(Region)+'',0,'+@i+',r_''+dbo.NettoyageURL(region)+''.htm'' '+
                        'FROM moteur_textuel '+
                        'WHERE typebien_id='+@i+' GROUP BY region;');
                --PRIX
                SET @ItemPalier = (SELECT ROUND(COUNT(*)/5,0) FROM moteur_textuel WHERE typebien_id=@i);
                SET @PrixMin=(SELECT MIN(prix) FROM moteur_textuel WHERE typebien_id=@i);
                SET @PrixMax=(SELECT MAX(prix) FROM moteur_textuel WHERE typebien_id=@i);
 
                SET @PrixMax =(SELECT MAX(prix) FROM (SELECT TOP (@ItemPalier) prix FROM moteur_textuel WHERE typebien_id=@i ORDER BY prix) T);
 
                SET @Items=(SELECT COUNT(*) FROM moteur_textuel WHERE typebien_id=@i AND prix<=@PrixMax);
 
                EXECUTE ('INSERT INTO '+@table+' (colonnedescriptif,nombreannonce,colonnetype,prixmin,prixmax) '+
                            'VALUES (''de '+CAST(@PrixMin AS VARCHAR(10))+' à '+CAST(@PrixMax AS VARCHAR(10))+'€'','''+CAST(@Items AS VARCHAR(10))+''',''p'','''+CAST(@PrixMin AS VARCHAR(10))+''','''+CAST(@PrixMax AS VARCHAR(10))+''');');
 
--                SET @j=1;
--                WHILE @j<4
--                    BEGIN
--                        SET @PrixMin=@PrixMax+1;
--                        SET @PrixMax =(SELECT MAX(prix) FROM (SELECT TOP (@ItemPalier) prix FROM moteur_textuel WHERE typebien_id=@i AND prix>@PrixMax ORDER BY prix) T);
--                        SET @Items=(SELECT COUNT(*) FROM moteur_textuel WHERE typebien_id=@i AND prix<=@PrixMax AND prix>@PrixMin);
--                        SELECT ('INSERT INTO visiteonline6.dbo.'+@table+' (colonnedescriptif,nombreannonce,colonnetype,prixmin,prixmax) '+
--                                'VALUES (''de '+SUBSTRING(CAST(@PrixMin AS VARCHAR(15)),1,LEN(CAST(@PrixMin AS VARCHAR(15)))-3)+' à '+SUBSTRING(CAST(@PrixMax AS VARCHAR(15)),1,LEN(CAST(@PrixMax AS VARCHAR(15)))-3)+'€'','''+CAST(@Items AS VARCHAR(15))+''',''p'','''+CAST(@PrixMin AS VARCHAR(15))+''','''+CAST(@PrixMax AS VARCHAR(15))+''')');
--                        SET @j=@j+1
--                    END
--
--                SET @PrixMin=@PrixMax+1;
--                SET @PrixMax =(SELECT MAX(prix) FROM moteur_textuel WHERE typebien_id=1);
--                SET @Items=(SELECT COUNT(*) FROM moteur_textuel WHERE typebien_id=1 AND prix<=@PrixMax AND prix>@PrixMin);
--                SELECT ('INSERT INTO visiteonline6.dbo.'+@table+' (colonnedescriptif,nombreannonce,colonnetype,prixmin,prixmax) '+
--                        'VALUES (''de '+SUBSTRING(CAST(@PrixMin AS VARCHAR(15)),1,LEN(CAST(@PrixMin AS VARCHAR(15)))-3)+' à '+SUBSTRING(CAST(@PrixMax AS VARCHAR(15)),1,LEN(CAST(@PrixMax AS VARCHAR(15)))-3)+'€'','''+CAST(@Items AS VARCHAR(15))+''',''p'','''+CAST(@PrixMin AS VARCHAR(15))+''','''+CAST(@PrixMax AS VARCHAR(15))+''')');
 
                FETCH C_CP INTO @i,@descriptif
            END
    CLOSE C_CP
    DEALLOCATE C_CP