Sybase, Auto increment

Sybase, Auto increment - SQL/NoSQL - Programmation

Marsh Posté le 15-09-2006 à 18:38:09    

Re-Bonjour,  
 
Je souhaite créer une table avec un identifiant auto-incrémentable. Jusque là tout va bien.  
Ma table est une table Sybase, mais j'ai aucune idée du produit exact.  
 
J'ai trouvé que sur Sybase, Auto Increment ne marche mais il faut utiliser le mot-clé "Identity".
Jusqu'ici tout va bien, j'ai donc simplement essayé :  
 
CREATE TABLE t_test(
      id INTEGER IDENTITY PRIMARY KEY,
      name VARCHAR(10)
)
 
Cela ne fonctionne pas et me donne l'erreur :  
Line 1:
Identity field 'id_test' must be a numeric with a scale of 0 and not null allowed.  
 
Voilà Voilà !!!! J'avoue que j'ai du mal à comprendre le message d'erreur. Quelqu'un a une idée ?
 
Merccccci
Laurent


---------------
Quelque soit la taille de l' éléphant , il arrivera toujours à remplir une marmite avec ses couilles
Reply

Marsh Posté le 15-09-2006 à 18:38:09   

Reply

Marsh Posté le 16-09-2006 à 01:50:56    

Tiens, c'est le même code que sur la page SQLZOO http://sqlzoo.net/howto/source/z.d [...] reate.xml.
 
Tiens, le message d'erreur concerne le champ id_test, alors que la table a un champ id mais pas id_test.
 
En tout cas, le champ doit être déclaré NUMERIC plutôt qu'en INTEGER.
Voici un code qui marchera peut-être mieux:

CREATE TABLE t_test
(
id NUMERIC IDENTITY NOT NULL,
name VARCHAR(10),
CONSTRAINT pk_parent PRIMARY KEY NONCLUSTERED (id)
)


Message édité par olivthill le 16-09-2006 à 01:52:21
Reply

Marsh Posté le 18-09-2006 à 10:52:09    

Merci beaucoup olivthill !
 
Effectivement, ca marche, mais je ne connaissais pas le type Numeric... J'avais bien compris qu'il aimait pas les entiers !
 
 
Et oui, j'ai pris le code sur SqlZoo qui est assez pratique.. Je m'en cache pas :) mais apparament ilf faudrait qu'il change leur exemple :)
 
Donc merci.....  
Laurent


---------------
Quelque soit la taille de l' éléphant , il arrivera toujours à remplir une marmite avec ses couilles
Reply

Marsh Posté le 25-09-2006 à 15:26:40    

Pour information, le type Numeric est un type permettant de stocker un nombre en utilisant un système de représentation non numérique en mémoire, mais basé sur une chaîne de caractères.
Il permet donc de stocker des nombres immenses (entre 38 et 40 chiffres selon le SGBD).
Il est donc particulièrement adapté aux clés (avec le type GUID qui n'est supporté que par un nombre limité de SGBD).
 
Le défaut principal du type Numeric (ou Decimal) c'est qu'à cause de sa représentation non numérique, les calculs effectués dessus sont bien plus lents qu'avec un type entier ou float. Pour un ID ce n'est pas dérangeant, puisqu'on fait rarement des calculs sur des identifiants. Deplus, grace à sa précision exacte pour les nombres à virgule, il sera préféré pour tous les champs "financiers" dans une base, afin de pouvoir effectuer des calculs sans problèmes d'arrondis du genre : 2 * 2 = 3.999999999997 qu'on aurait avec float (ici, on s'en fout un peu, je m'écarte du sujet ;))


Message édité par MagicBuzz le 25-09-2006 à 15:27:03
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed