2010-11-08 5 views
2

Je viens de créer une procédure stockée pour insérer des données dans une table après avoir effectué certains calculs. Mon créer un code de procédure est la suivante:GETDATE() provoquant une erreur de syntaxe dans SQL Server 2008

ALTER PROCEDURE [dbo].[myStoredProc] 
    @log_id INT, 
    @job_nm VARCHAR(20), 
    @feed_in_out_ind CHAR(1) = null, 
    @process_dt DATETIME = null, 
    @procedure_dt DATETIME = NULL, 
    @procedure_nm VARCHAR(20), 
    @object_ty VARCHAR(20), 
    @operation_ty VARCHAR(20), 
    @num_records INT, 
    @success_status BIT, 
    @error_msg VARCHAR(50) = NULL, 
    @start_time DATETIME, 
    @end_time DATETIME = null 
AS  

Lorsque je tente d'appeler la procédure stockée, si j'utilise le GETDATE() pour l'une des datetimes, je reçois une erreur de syntaxe Incorrect syntax near ')' Quand je remplace la commande getdate() un datetime réel, la procédure s'exécute correctement.

Voici mon code d'appel:

EXEC myStoredProc 
    @log_id = 1, 
    @job_nm = 'It', 
    @feed_in_out_ind = 'i', 
    @process_dt = GETDATE(), 
    @procedure_dt = GETDATE(), 
    @procedure_nm = 'Test 1', 
    @object_ty = 'test', 
    @operation_ty = 'test', 
    @num_records = 50, 
    @success_status = 0, 
    @error_msg = 'Hello', 
    @start_time = GETDATE(), 
    @end_time = GETDATE() 

Toutes les idées? Merci.

Répondre

3

Essayez

DECLARE @Now AS DATETIME 
SET @Now = GETDATE() 

EXEC myStoredProc 
    @log_id = 1, 
    @job_nm = 'It', 
    @feed_in_out_ind = 'i', 
    @process_dt = @Now , 
    @procedure_dt = @Now , 
    @procedure_nm = 'Test 1', 
    @object_ty = 'test', 
    @operation_ty = 'test', 
    @num_records = 50, 
    @success_status = 0, 
    @error_msg = 'Hello', 
    @start_time = @Now , 
    @end_time = @Now 
+2

Grande solution de contournement, mais il ne donne aucune explication du problème sous-jacent. –

+0

Cela a fonctionné - Merci. Le problème est que j'appellerai cette procédure de beaucoup d'autres procédures stockées. J'ai vraiment besoin de comprendre ce qui a provoqué cela, de sorte qu'il peut être travaillé d'une manière moins «bandaid». – chama

+3

Ce n'est pas un pansement. Voir "Spécification des paramètres" sur cette page dans les documents: http://msdn.microsoft.com/en-us/library/ms189915(v=SQL.100).aspx. – Anna

0

Je soupçonne que la raison pour laquelle vous avez des problèmes est que vous essayez d'appeler une fonction dans le paramètre d'une procédure stockée.

Cela fait plus d'un an que j'ai recherché comment les procédures stockées ont fonctionné exactement si ma mémoire est correcte, vous devriez pouvoir stocker l'heure actuelle dans une variable locale et utiliser cette valeur.

Je suppose que je devais ralentir pour poster parce que la « solution » était exactement ce que je suggère:

$
3

Vous ne pouvez pas appeler une fonction dans les paramètres AFAIK.

Quelque chose que j'ai utilisé est:

ALTER PROCEDURE [dbo].[myStoredProc] 
    @process_dt DATETIME = null 

AS 

IF @process_dt IS NULL 
    BEGIN  
     SET @TimeComplete = GETDATE() 
    END 

Ajouter un de ceux pour chacune des variables que vous souhaitez par défaut maintenant. Ou, déclarez une variable au début de la proc (INSIDE IT), et réglez toutes les heures à cela. De cette façon, ils sont cohérents à l'intérieur (pas de variation en millisecondes entre).

2

paramètres stockés proc prennent des constantes ou par défaut NULL

De CREATE PROCEDURE

défaut

est une valeur par défaut pour le paramètre. Si une valeur par défaut est définie, la procédure peut être exécutée sans spécifier de valeur pour ce paramètre. La valeur par défaut doit être une constante ou peut être NULL.

Normalement, je ferais SET @dtparam = ISNULL(@dtparam, GETDATE()) dans la procédure stockée

+0

+1 - gbn est d'accord avec moi!:) – JNK

+0

@JNK: Suis-je si mauvais sinon? – gbn

+0

Pas du tout. Cependant, vous ne tirerez pas de coups de poing si quelque chose est incorrect. – JNK