[SQL server 2005] erreur clef trop grande !

thekingsky38 Messages postés 5 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 19 juin 2007 - 14 juin 2007 à 14:18
thekingsky38 Messages postés 5 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 19 juin 2007 - 18 juin 2007 à 11:34
J'ai un problème:

 
J'ai un table sur mon SQLs erver 2005 qui a en tout 4679 enregistrement.

La clé primaire est bien défini en tant que IDENTITY commencant a 1 par incrément de 1.

Le problème est que c'est une base que j'ai récupéré d'une autre
personne et je sais pas comment il c'est démerdé mais l'ID est à
-2147483648 d'un coté et à 2147483647 de l'autre. Autrement dit il a
atteind les 2 bornes d'un int sur 32 bits !!

 
HORS : au centre il y a des méga trou (forcement 4679 n'est pas égale a 2^32 )

 
Donc voilà mon gros problème c'est qu'il veut plus me rajouter
des enregistrements car il "crois" qu'il est a la fin il me dit : Une
erreur arithmétique s'est produite lors de la conversion de IDENTITY en
type de données int. Débordement aithmétique."

J'ai essayé de le passer en big int ca marche niveau SQL server
mais le problème c'est que j'intérroge la base avec Access et access ne
supporte pas le big int et ne le comprend pas, il me met ca en texte du
coup mes formulaires plante !

 
J'ai essayé avec l'ancien base access, le champ ID et donc bien en mode Numéroauto et ca marche .

Access est assez intélligent pour trouver une valeur de clé
primaire non continue au milieu de l'int alors que SQL server plante
!!! Ca craint!

Le champ merdique de la table en question est en plus foreign key sur beaucoup d'autre table :(

HELP

1 réponse

thekingsky38 Messages postés 5 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 19 juin 2007
18 juin 2007 à 11:34
J'ai eu une idée mais j'ai un problème de requete SQL maintenant :
L'idée c'est:  
-  crée les scripts pour les contraintes.
-  créer une nouvelle table ou je copies celle qui pose problème.  
-  créer une deuxième table qui fait le lien entre les anciens ids et les nouveaux.  
-  dropper les contraintes.  
-  dropper la table problématique.  
-  renommer la table correcte avec le bon nom.  
-  corrige les ids des tables via un update avec la table faisant le lien.  
-  exécute les scripts (ou le script si t'a tout regroupé dans un seul) pour recréer les contraintes.  
Par contre j'ai un pb pour la requetes update :
Je pense que l'une des deux est juste mais je sais pas laquel ...:
 
UPDATE toto
SET SOC_ID = ( SELECT nouv_SOC_ID  
FROM lien_FK WHERE lien_FK.Ancien_SOC_ID = toto.SOC_ID)
WHERE lien_FK.Ancien_SOC_ID = toto.SOC_ID  
 
 
UPDATE toto  
SET SOC_ID = ( SELECT nouv_SOC_ID FROM lien_FK)  
WHERE lien_FK.Ancien_SOC_ID = toto.SOC_ID  

La 1ère est la bonne non ?

help
0