Comment déclarer une date statique lors de l'exécution d'un script proc stocké?

J'essaie d'exécuter un script via Management Studio.

Quelque chose comme ça:

USE [MYDB] GO DECLARE @return_value int EXEC @return_value = [dbo].[myTABLE] @AsAt = Datetime('27/01/2012 10:37:31'), @BatchID = 6754848 SELECT 'Return Value' = @return_value GO 

Continuez à recevoir des erreurs en disant qu'il ne peut pas convertir de nVarChar à l'heure de la date. Quelle est la bonne façon de faire cela?

Si c'est pour SQL Server, vous devez utiliser yyyy-mm-ddThh:mi:ss.mmm . Il sera sûr indépendamment des parameters régionaux.

Note: Le T est important et devrait être dans la string 2012-01-27T10:37:31 .
Une autre option serait de supprimer - 20120127 10:37:31 .

Vous devez spécifier le style DateTime personnalisé et ce qui est le plus important – vous ne pouvez pas utiliser les fonctions de date et heure. Appelez SP directement afin de mettre en cache la valeur datetime convertie dans la variable temporaire grâce à Martin Smith pour ce point:

 DECLARE @return_value int DECLARE @tmpDate varchar(20) SELECT @tmpDate = CONVERT(datetime, '27/01/2012 10:37:31', 103) EXEC @return_value = [dbo].[myTABLE] @AsAt = @tmpDate, @BatchID = 6754848 

MSDN :

Syntaxe pour CONVERT:

CONVERT (data_type [(longueur)], expression [, style])

Reportez-vous à cet article sur Comment convertir une string en datetime dans SQL Server

Normalement, lorsque vous utilisez des strings comme dates:

 DECLARE @mydate AS DATETIME SELECT @mydate = CAST('2012-01-27 10:37:31' AS DATETIME) SELECT @mydate ----------------------- 2012-01-27 10:37:31.000 

Essayez d'utiliser CAST () ou CONVERT () vérifiez l'aide de T-SQL sur ces 2.

NOTE: utilisez le format mentionné par Mikael (ie'2012-01-27 10: 37: 31.000 ') Ou vous verrez probablement des erreurs comme ceci:

 Msg 242, Level 16, State 3, Line 5 The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value. 

IT est vrai ce qui a été dit à propos de convert / cast ne fonctionne pas sur un appel de procédure, donc vous devez changer un peu votre requête:

 DECLARE @return_value int DECLARE @AsAt DATETIME SELECT @AsAt = CAST('2012-01-27 10:37:31' AS DATETIME) EXEC @return_value = [dbo].[myTABLE] @AsAt, @BatchID = 6754848 SELECT 'Return Value' = @return_value