Conversion bigint

Signaler
Messages postés
88
Date d'inscription
mardi 3 mai 2005
Statut
Membre
Dernière intervention
17 septembre 2006
-
Messages postés
88
Date d'inscription
mardi 3 mai 2005
Statut
Membre
Dernière intervention
17 septembre 2006
-
bonjour,
est-il possible de convertir un paramètre passé dans une procédure stockée ? J'ai un varchar(50) que je voudrais convertir en bigint. 
merci pour votre aide...

5 réponses

Messages postés
259
Date d'inscription
mercredi 3 mai 2006
Statut
Modérateur
Dernière intervention
11 janvier 2010
7
Oui c'est possible, les conversions sur SQL Server se font avec CAST (qui est un standard SQL) ou CONVERT (propre à SQL Server).

Voici le lien vers la documentation en ligne :
http://msdn2.microsoft.com/fr-fr/library/ms187928.aspx

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
Messages postés
88
Date d'inscription
mardi 3 mai 2005
Statut
Membre
Dernière intervention
17 septembre 2006

re,
voici ma procédure. J'ai toujours un pb de Error converting data type varchar to bigint. est-ce que je loupe quelque chose?


CREATE PROCEDURE UpdateRole  @wwid_pers varchar(50), @id_role bigint, @date_deb datetime, @date_exp datetime, @date_sup datetime,
     @id_form varchar(50), @nom_role varchar(50), @code_role varchar(50)
     
AS
 DECLARE @id_EN bigint
 SET @id_EN=CONVERT( bigint, @id_form )


 DECLARE @id_pers bigint
 SET @id_pers=(SELECT personne.id_pers FROM personne WHERE [mailto:wwid_pers=@wwid_pers wwid_pers=@wwid_pers])


 DECLARE @id_dem bigint
 DECLARE @var bigint
 
 DECLARE @nom_form varchar(50)
 SET @nom_form=(SELECT nom_form FROM formulaire WHERE [mailto:id_form=@id_EN id_form=@id_EN])
 
 DECLARE @nom_logi varchar(50)
 SET @nom_logi=(SELECT nom_logi FROM logiciel, formulaire WHERE formulaire.id_logi=logiciel.id_logi AND [mailto:formulaire.nom_form=@id_EN formulaire.nom_form=@id_EN])
 
 DECLARE @nom_serv varchar(50)
 SET @nom_serv=(SELECT nom_serv FROM service, formulaire WHERE formulaire.id_serv=service.id_serv AND [mailto:formulaire.nom_form=@id_EN formulaire.nom_form=@id_EN])


 
 SET @var=(SELECT DISTINCT id_dem FROM table_virtuel)
 if(@var is NULL)
  SET @id_dem=((SELECT MAX(id_dem) FROM [demande])+1)
 else
  SET @id_dem=@var
  
 if (@date_exp>@date_deb OR @date_exp=NULL)
 begin
  UPDATE etre_attribue
  SET [mailto:date_exp=@date_exp date_exp=@date_exp], [mailto:id_dem=@id_dem id_dem=@id_dem]
  WHERE( [mailto:id_pers=@id_pers id_pers=@id_pers] AND [mailto:id_role=@id_role id_role=@id_role])
  
  if(@id_role NOT IN (select id_role from table_virtuel))
   INSERT INTO table_virtuel(date_exp, id_role, id_dem, nom_form, nom_logi, nom_serv, nom_role, code_role)
   VALUES(@date_exp, @id_role, @id_dem, @nom_form, @nom_logi, @nom_serv, @nom_role, @code_role)
  else
   UPDATE table_virtuel
   SET [mailto:date_exp=@date_exp date_exp=@date_exp], [mailto:date_sup=@date_sup date_sup=@date_sup], [mailto:id_dem=@id_dem id_dem=@id_dem], [mailto:nom_form=@nom_form nom_form=@nom_form], [mailto:nom_logi=@nom_logi nom_logi=@nom_logi],
     [mailto:nom_serv=@nom_serv nom_serv=@nom_serv], [mailto:nom_role=@nom_role nom_role=@nom_role], [mailto:code_role=@code_role code_role=@code_role]
   WHERE [mailto:id_role=@id_role id_role=@id_role]
 end
 
 if(@date_sup>@date_deb )
 begin
  UPDATE etre_attribue
  SET [mailto:date_sup=@date_sup date_sup=@date_sup], [mailto:id_dem=@id_dem id_dem=@id_dem]
  WHERE( [mailto:id_pers=@id_pers id_pers=@id_pers] AND [mailto:id_role=@id_role id_role=@id_role])


  if(@id_role NOT IN (select id_role from table_virtuel))
   INSERT INTO table_virtuel(date_sup, id_role, id_dem, nom_form, nom_logi, nom_serv, nom_role, code_role)
   VALUES(@date_sup, @id_role, @id_dem, @nom_form, @nom_logi, @nom_serv, @nom_role, @code_role)
  else
   UPDATE table_virtuel
   SET [mailto:date_exp=@date_exp date_exp=@date_exp], [mailto:date_sup=@date_sup date_sup=@date_sup], [mailto:id_dem=@id_dem id_dem=@id_dem], [mailto:nom_form=@nom_form nom_form=@nom_form], [mailto:nom_logi=@nom_logi nom_logi=@nom_logi],
     [mailto:nom_serv=@nom_serv nom_serv=@nom_serv], [mailto:nom_role=@nom_role nom_role=@nom_role], [mailto:code_role=@code_role code_role=@code_role]
   WHERE [mailto:id_role=@id_role id_role=@id_role]
 end
GO
Messages postés
259
Date d'inscription
mercredi 3 mai 2006
Statut
Modérateur
Dernière intervention
11 janvier 2010
7
J'ai fait un test juste avec cette portion :
DECLARE

@id_form
varchar(50
)
SET @id_form
=
'123'
DECLARE @id_EN
bigint
SET @id_EN
=CONVERT(
bigint, @id_form
)

PRINT @id_EN
Et cela fonctionne... A mon av:is celà vient de ce qu'il y a dans la chaîne @id_form
N'y aurait il pas autre chose que des chiffres ?

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
Messages postés
114
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
17 octobre 2006

crilun
ta chaine contient peut etre des espaces,
regarde du coté de ltrim et rtrim de maniere a supprimer tes esapces avant de tenter ta convertion.
Messages postés
88
Date d'inscription
mardi 3 mai 2005
Statut
Membre
Dernière intervention
17 septembre 2006

en fait je recupere @id_form de @id_form=session["id_form"]; ca doit venir de la. pour finir j'ai abandonné l'idee de la session, je me suis rendue compte que ca ne me servbait pas.  merci à vous !