SQLServer : Problème de datetime

SQLServer : Problème de datetime - SQL/NoSQL - Programmation

Marsh Posté le 12-06-2006 à 10:56:25    

Bonjour, j'ai une procédure stockée dans laquelle je passe un parametre date de type DATETIME.
Je dois utiliser un varchar pour ma requête car j'ai un parametre orderBy et SQLServer n'accepte pas des variables dans un order by..Mais cela me pose probleme lorsque je veux également utiliser le paramètre date.
-> Erreur de syntaxe lors de la conversion d'une valeur datetime à partir d'une chaine de caracteres
Je précise que cela fonctionne tb lorsque je n'utilise pas le paramètre orderBy et donc en utilisant une requête sans passer par le varchar. J'ai également utiliser cast, convert, etc je suis à cours d'idée malheureusement.
Auriez vous une solution? merci d'avance
 
CREATE PROCEDURE recherche @date datetime, @orderBy varchar(20) AS
DECLARE @tri varchar(50)
DECLARE @Str varchar(1000)
set @tri = ' ORDER BY '+@orderBy
Select @Str ='SELECT * FROM matable WHERE date > '+@date + @tri
exec (@Str)
GO

Message cité 1 fois
Message édité par oggo le 12-06-2006 à 11:09:58
Reply

Marsh Posté le 12-06-2006 à 10:56:25   

Reply

Marsh Posté le 12-06-2006 à 11:22:54    

formate d'abord ta date au bon format :)  format(date; "jj/mm/aaaa" )  ... ( jcrois que c ca la syntaxe :p lol )

Reply

Marsh Posté le 12-06-2006 à 11:30:24    

En fait, je pense qu'elle est bien formatée. C'est surement un problème à cause du varchar mais je ne trouve pas d'autres moyens pour utiliser une variable dans un order by donc je suis obligé de l'utiliser.
J'ai tester avec une requête simple mais cela ne fonctionne pas.
 
DECLARE @Str varchar(1000)
DECLARE @d datetime
set @d ='18/02/2005'
Select @Str ='SELECT * FROM matable WHERE date> '+@d
exec (@Str)
GO
 
par contre sans utiliser de varchar cela fonctionne
 
DECLARE @d datetime
set @d ='18/02/2005'
SELECT * FROM matable WHERE date> @d
GO


Message édité par oggo le 12-06-2006 à 11:37:05
Reply

Marsh Posté le 13-06-2006 à 15:31:59    

oggo a écrit :

Bonjour, j'ai une procédure stockée dans laquelle je passe un parametre date de type DATETIME.
Je dois utiliser un varchar pour ma requête car j'ai un parametre orderBy et SQLServer n'accepte pas des variables dans un order by..Mais cela me pose probleme lorsque je veux également utiliser le paramètre date.
-> Erreur de syntaxe lors de la conversion d'une valeur datetime à partir d'une chaine de caracteres
Je précise que cela fonctionne tb lorsque je n'utilise pas le paramètre orderBy et donc en utilisant une requête sans passer par le varchar. J'ai également utiliser cast, convert, etc je suis à cours d'idée malheureusement.
Auriez vous une solution? merci d'avance

 

CREATE PROCEDURE recherche @date datetime, @orderBy varchar(20) AS
DECLARE @tri varchar(50)
DECLARE @Str varchar(1000)
set @tri = ' ORDER BY '+@orderBy
Select @Str ='SELECT * FROM matable WHERE date > '+@date + @tri
exec (@Str)
GO

  



  


Ce n'est pas très joli, mais bon....  ça marche    :)    

 

CREATE PROCEDURE recherche @date varchar(10), @orderBy varchar(20) AS

 

DECLARE @tri varchar(50)
DECLARE @Str varchar(1000)
set @tri = ' ORDER BY '+@orderBy
Select @Str ='SELECT * FROM matable WHERE date  >  cast(''' + @date + ''' as smalldatetime)' + @tri
exec (@Str)

 

GO

 

Attention à bien respecter les apostrophes     :)

Message cité 1 fois
Message édité par chapi le 13-06-2006 à 15:34:30
Reply

Marsh Posté le 13-06-2006 à 15:37:56    

Lorsque tu as fait le convert(), tu as pensé à ajouter les guillemets ?
 
Genre :  
 

CREATE PROCEDURE recherche @date datetime, @orderBy varchar(20) AS
DECLARE @tri varchar(50)
DECLARE @Str varchar(1000)
set @tri = ' ORDER BY '+@orderBy
Select @Str ='SELECT * FROM matable WHERE date > " '+convert(varchar(8),@date,112) + ' "  ' + @tri
exec (@Str)
GO

Reply

Marsh Posté le 14-06-2006 à 09:28:03    

chapi a écrit :

Ce n'est pas très joli, mais bon....  ça marche    :)    
 
CREATE PROCEDURE recherche @date varchar(10), @orderBy varchar(20) AS
 
DECLARE @tri varchar(50)
DECLARE @Str varchar(1000)
set @tri = ' ORDER BY '+@orderBy
Select @Str ='SELECT * FROM matable WHERE date  >  cast(''' + @date + ''' as smalldatetime)' + @tri
exec (@Str)
 
GO

 
Attention à bien respecter les apostrophes     :)


Merci cela marche très bien et ca m'évite d'avoir une procédure stockée beaucoup plus longue...

Reply

Marsh Posté le 14-06-2006 à 09:32:44    

Elmoricq a écrit :

Lorsque tu as fait le convert(), tu as pensé à ajouter les guillemets ?
 
Genre :  
 

CREATE PROCEDURE recherche @date datetime, @orderBy varchar(20) AS
DECLARE @tri varchar(50)
DECLARE @Str varchar(1000)
set @tri = ' ORDER BY '+@orderBy
Select @Str ='SELECT * FROM matable WHERE date > " '+convert(varchar(8),@date,112) + ' "  ' + @tri
exec (@Str)
GO



J'avais déja essayé avec les guillemets et j'obtiens nom de colonne incorrect '01/01/2004' par ex alors que mes dates sont bien en datetime, pr info j'ai fais un convert(varchar(10),@date,103)...Mais merci quand même.

Reply

Sujets relatifs:

Leave a Replay

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