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 :
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).
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
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 :
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é).
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
Sur base d'exemples trouvés sur divers forum et sur le site de MSDN, j'ai écrit le code suivant :
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.
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
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.
Partager