Bonjour à tous,

Je ne sais pas trop comment présenté le problème de manière claire et concise donc je vais rentrer directement dans le vif du sujet ^^.

Actuellement, il existe une base de donnée nommée GIFTCARD et qui contient cette table :

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
USE [GIFTCARD]
GO
/****** Object:  Table [dbo].[ChequeAchatHistory]    Script Date: 07/01/2011 10:12:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[ChequeAchatHistory](
	[SeqNrHist] [int] IDENTITY(1,1) NOT NULL,
	[BarcodeMin] [varchar](13) COLLATE Latin1_General_CI_AS NOT NULL,
	[BarcodeMax] [varchar](13) COLLATE Latin1_General_CI_AS NOT NULL,
	[DatTim] [datetime] NOT NULL,
	[Action] [varchar](1) COLLATE Latin1_General_CI_AS NOT NULL,
	[Origin] [int] NULL,
	[DestType] [int] NULL,
	[Dest] [int] NULL,
	[Value] [int] NULL,
	[SaleType] [int] NULL,
	[UserType] [int] NULL
) ON [PRIMARY]
 
GO
SET ANSI_PADDING OFF
Comme vous l'aurez probablement compris, cette table contient l'historique de toutes les transactions concernant des bons d'achat ou des giftcards. Ces bons/cartes étant souvent vendues par lot, l'auteur de la table a jugé bon (probablement à raison) d'écrire un record par lot plutôt que par bon/carte. Lors de la vente d'un lot, comme les barcodes se suivent, il écrit donc le premier (barcodemin) et le dernier (barcodemax).

Et jusqu'ici, aucun souci.

Maintenant, pour une demande particulière, j'ai besoin d'avoir un record par bon/carte.
J'ai donc créé une DB de test qui contient la table suivante :

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
USE [test]
GO
/****** Object:  Table [dbo].[tbTest]    Script Date: 07/01/2011 10:17:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[tbTest](
	[id] [bigint] IDENTITY(1,1) NOT NULL,
	[type] [char](5) COLLATE Latin1_General_CI_AS NULL,
	[barcode] [bigint] NOT NULL,
	[date] [datetime] NOT NULL,
	[action] [char](1) COLLATE Latin1_General_CI_AS NULL,
	[origine] [int] NULL,
	[destType] [int] NULL,
	[dest] [int] NULL,
	[valeur] [int] NULL,
	[saleType] [int] NULL,
	[userType] [int] NULL,
 CONSTRAINT [PK_tbTest] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
 
GO
SET ANSI_PADDING OFF
En gros, il s'agit de la même que précédement à ceci près que la colonne type reprend en fait les 5 premiers digits du barcode et la colonne barcode (le nom est probablement mal choisi) reprend les 7 digits restant (le checkdigit n'étant pas renseigné).


Sur base d'exemples trouvés sur divers forum et sur le site de MSDN, j'ai écrit le code suivant :

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
 
declare @strmin as char(12), @strmax as char(12), @date as datetime, @action as char(1), @origine as int, @destinationType as int, 
		@destination as int, @valeur as int, @sale as int, @user as int, @minimum as bigint, @maximum as bigint
 
DECLARE GiftCard_Cursor CURSOR FOR
SELECT barcodemin, barcodemax, dattim, action, origin, desttype, dest, value, saletype, usertype
FROM GIFTCARD.dbo.chequeachathistory
WHERE barcodemin like '24501%';
OPEN GiftCard_Cursor;
FETCH NEXT FROM GiftCard_Cursor
INTO @strmin, @strmax, @date, @action, @origine, @destinationtype, @destination, @valeur, @sale, @user;
 
set @minimum = cast(substring(@strmin,6,7) as bigint);
set @maximum = cast(substring(@strmax,6,7) as bigint);
 
while not (@minimum = @maximum)
	begin
	insert into test.dbo.tbTest values('24501',@minimum, @date, @action, @origine, @destinationtype, @destination, @valeur, @sale, @user);
 
	set @minimum = @minimum+1;
	end
 
 
CLOSE GiftCard_Cursor;
DEALLOCATE GiftCard_Cursor;
GO
Il ne m'affiche aucune erreur et lorsque je l'exécute, j'ai bien le message m'informant que la commande a bien été exécutée mais la table tbTest reste invariablement vide.

Je dois bien avouer que c'est la première fois que j'utilise ce genre d'instruction dans sql server. Mes actions se limitent en général à des requêtes classiques.

Pourriez-vous donc m'aider à débugger ce bout de code afin que je puisse alimenter ma table tbTest ?

Voilà, j'espère avoir données toutes les informations nécessaires.

Merci d'avance,

Griftou.